函数定义
- 函数是组织好的,可重复使用的,用来实现单一,或相关联的代码块
- 函数能提高应用的模块行和代码的重复利用率。除Python的内建函数,如print(),还支持用户自定义函数
函数调用
-
Python定义函数使用def关键字,一般格式如下:
def 函数名(参数列表): 函数体 -
return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
def max(a,b): if a>b: return a else: return b a=5 b=7 print(max(a,b))
参数传递
- 调用函数时,可使用的正式参数类型分为:必需参数、关键字参数、默认参数、不定长参数
必需参数
-
调用函数时,若未传入必需参数会出现语法错误
def printme(str): print(str) return printme('hello python') # hello python printme() # TypeError: printme() missing 1 required positional argument: 'str' -
必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样
def max(a,b): if a>b: return a else: return b a=5 b=7 print(max(a)) # TypeError: max() missing 1 required positional argument: 'b'
关键字参数
-
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值
def printinfo(name,age): print("名字:",name) print("年龄:",age) return printinfo(age=25,name='python')
默认参数
- 调用函数时,如果没有传递参数,则会使用默认参数
def printinfo(name,age=15): print("名字:",name) print("年龄:",age) return printinfo(age=25,name='python') printinfo(name='hello')
不定长参数
-
使用时,可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,和上述参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression] -
加了星号
*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数def printinfo(arg1,*vartuple): print(arg1) print(vartuple) printinfo(70,60,50) # 70 # (60, 50) -
还用一种是参数带两个星号
**,基本语法如下:def functionname([formal_args,] **var_args_dict ): "函数_文档字符串" function_suite return [expression]加了两个星号
**的参数会以字典的形式导入def printinfo(arg1,**vardict): print(arg1) print(vardict) printinfo(1,a=2,b=3) # 1 # {'a': 2, 'b': 3} -
声明函数时,参数中星号
*可以单独出现,星号*后的参数必须用关键字传入def f(a,b,*,c): return a+b+cls chang f(1,2,c=3) # 6 f(1,2,3) # TypeError: f() takes 2 positional arguments but 3 were given
返回值
return[表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回Nonedef sum(arg1,arg2): total=arg1+arg2 print("函数内:",total) return total total=sum(10,20) print("函数外:",total) # 函数内: 30 # 函数外: 30
局部变量与全局变量
局部变量
-
局部变量为在函数内部定义的变量
-
不同的函数,可以定义名字相同的局部变量,互不影响
-
局部变量的作用是为了临时保存数据
def score(): # 定义局部变量 score=100 print('分数为:',score) score()
全局变量
-
如果一个变量,既能在一个函数中使用,也能在其他函数中使用,这样的变量叫做全局变量
-
全局变量是在函数外面定义的变量,能够在所有函数中进行访问
# 定义全局变量 score=100 def zhangsan(): print(score) def lisi(): print(score) zhangsan() lisi()
局部变量与全局变量名字相同
-
若全局变量的名字与局部变量的名字相同,则使用局部变量
# 定义全局变量 score=100 def zhangsan(): score=90 print(score) def lisi(): print(score) zhangsan() # 90 lisi() # 100
修改全局变量
# 定义全局变量
score=100
def zhangsan():
# 修改全局变量
global score
score=90
print(score)
def lisi():
print(score)
zhangsan() # 90
lisi() # 90
递归函数
-
如果一个函数在内部调用自己本身,这个函数就是递归函数
# 计算阶乘 n!=1 × 2 × 3 × ... × n 用函数fact(n)表示: # fact(n) = 1 × 2 × 3 × ... × (n-1) × n =(n-1)! × n = fact(n-1) × n def fact(n): if n==1: return 1 else: return fact(n-1)*n fact(5) # 120
匿名函数
- Python使用
lambda关键字来创建小型匿名函数,可以简化代码,提高运行效率 - 匿名函数不需要使用
def关键字来定义完整函数 - lambda函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用
- lambda语法格式:
lambda arguments:expression# lambda函数没有参数 f=lambda:"hello world" print(f()) # hello world # lambda函数有一个参数 x=lambda a:a+10 print(x(5)) # 15 # lambda函数有多个参数 x=lambda a,b,c:a+b+c print(x(1,2,3)) # 6 - lambda函数通常与内置函数如map()、filter()、reduce()一起使用,以便在集合上执行操作
# 计算平方 numbers=[1,2,3,4,5] squared=list(map(lambda x:x**2,numbers)) print(squared) # [1, 4, 9, 16, 25] # 筛选偶数 numbers=[1,2,3,4,5,6,7,8] even_numbers=list(filter(lambda x:x%2==0,numbers)) print(even_numbers) # [2, 4, 6, 8] - 匿名函数与普通函数对比
# 普通函数 def fun(a,b,c): return a+b+c print(fun(1,2,3)) # 匿名函数 r=(lambda a,b,c:a+b+c)(1,2,3) print(r)
:函数&spm=1001.2101.3001.5002&articleId=149421731&d=1&t=3&u=4e351fc524874ec8b9703cc49ae1fd6d)
244

被折叠的 条评论
为什么被折叠?



