python的函数定义以及使用

209 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

函数的定义与使用

函数的理解与定义

函数是一段代码的表示

  • 函数是一段具有特定功能的、可重用的语句组
  • 函数是一种功能的抽象,一般函数表达特定功能
  • 两个作用:降低编程难度和代码复用

函数的定义

类似与c的函数定义
def<函数名>(<参数(0个或多个)>):
	<函数体>
	return <返回值>
案例:计算n!
def jiecheng(n):
	s=1
	for i in range(1,n+1):
		s*=i
	return s
  • 函数定义时,所指参数是一种占位符
  • 函数定义之后,如果不经调用,不会执行
  • 函数定义时,参数时输入,函数体是处理、结果是输出(IPO

函数是完整代码的封装

函数的使用及调用过程

调用是运行函数代码的方式

  • 调用时要给出实际参数
  • 实际参数替换定义中的参数
  • 函数调用后得到返回值
示例:计算10def fact(n):
	s=1
	for i in range(1,n+1):
		s*=i
	return s
a= fact(10)
print(a)

函数的调用过程

输入变量给函数——>函数接受变量将值代入函数体中进行运算——>返回一个结果——>输出结果

总结:函数调用就是将实际参数给形式参数

函数的参数传递

参数个数(函数可以有参数,也可以没有,但必须保留括号)

def <函数名>():
	<函数体>
	return<返回值>
#eg:
def fact():
    print("我也是函数")

可选参数

函数定义时可以为某些参数指定默认值,构成可选参数

def <函数名>(<非可选参数>,<可选参数>):
	<函数体>
	return<返回值>
  • 注意所有的可选参数必须放在非可选参数之后
def fact (n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
	return s//m
这个函数可以选择计算n!也可以计算n!//m

可变参数

在定义函数时,可以设计函数接收的参数个数时可变的,即不确定参数总数量

def <函数名>(<参数>,*b):
	<函数体>
	return<返回值>
  • 确定参数放在前面,不确定的用*b,*c,*a表示
def fact(n,*b):
	s=1
	for i in range(1,n+1):
		s*=i
	for item in b:
        s*=item
	return s

参数传递的两种方式

函数调用时,参数可以按照位置或名称方式传递

1.按照位置的方式 2.按照名称的方式

def fact (n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
	return s//m
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
函数调用的两种
fact(10,5) #位置传递
fact(m=5,n=10) #名称传递

函数的返回值

函数可以返回0个或多个结果

  • return保留字用来传递返回值
  • 函数可以有返回值,也可以没有,可以有return,也可以没有
  • return可以传回0个返回值,也可以返回n个返回值
def fact (n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
	return s//m ,n,m
	>>>fact(10,5)
    (725760,10,5)<——元组类型
    >>>a,b,c = fact(10,5)
    >>>print(a,b,c)
    725760 10 5
  • 列表类型:[1,2,3,4]
  • 元组类型:(1,2,3,4)

局部变量和全局变量

程序全局变量叫全局变量,函数体中的变量叫局部变量

n,s = 10100 <——n和s是全局变量
def fact(n):
	s=1    <——fact()函数中的n和s是局部变量
	for i in range(1,n+1):
		s*=i
	return s
print(fact(n),s) <——n和s是全局变量

规则1.局部变量和全局变量是不同变量

  • 局部变量是函数内部的占位符,与全局变量可能重名但不同
  • 函数运算结束后,局部变量被释放(变量不再存在)
  • 可以使用global保留字在函数内部使用全局变量
n,s = 10100 
def fact(n):
	s=1   
	for i in range(1,n+1):
		s*=i
	return s
print(fact(n),s)
>>>>>>>>>>>>>>>>>>>>>>>>>>
n,s = 10100 
def fact(n):
	global s  <————fact()函数中使用global保留字声明此处s是全局变量s
	for i in range(1,n+1):
		s*=i
	return s  <————此处是指全局变量s
print(fact(n),s) <——此处全局变量s被函数修改

规则2.局部变量为组合数据类型且未创建,等同于全局变量

  • 组合类型就是多个数组成的一个类型(在python中组合类型是由指针体现的)
ls = ["F","f"] <——通过使用[]真实创建了一个全局变量和列表ls
def func(a):
	ls.append(a) <——在ls列表中增加一个元素 此处ls是列表类型,未真实创建则等同于全                                                                       局变量
	return
func("c") <——全局变量ls被修改
print(ls)
结果:["F","f","C"]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ls = ["F","f"]
def func(a):
    ls = [] <——真实创建了这个组合数据类型(不等于全局变量)
	ls.append(a)
	return
func("c") 
print(ls)
结果:["F","f"]    "C"被释放了

总结:如果在内部没有创建这个组合数据,那么指针会指向外部的组合变量,即全局变量

lambda函数

lambda函数返回函数名作为结果

  • lambda函数是一种匿名函数,即没有名字的函数
  • 使用lambda保留字定义,函数名是返回结果
  • lambda函数用于定义简单的、能够在一行内表示的函数
<函数名> = lambda <参数>:<表达式>
<=>
def<函数名>(<参数>):
	<函数体>
	return<返回值>
>>>>>>>>>>>>>>>>>>>>>>
>>>f = lambda x,y : x+y
>>>f(10,15)
25
>>>f=lambda : "lambda函数"
>>>print(f())
lambda函数

慎用lambda函数

  • lambda函数主要用作一些特定函数或方法的参数
  • lambda函数有一些固定使用方式,建议逐步掌握
  • 一般情况下,建议使用def定义的普通函数