一,函数关键字请参考以下博客
https://blog.csdn.net/s1h2e3n4g5/article/details/76416257
二,函数的定义参数
def 函数名(参数列表):
函数体
1,缺省参数
def foo(a,b=8): print(a,b) foo("leason") foo("leason",88)
2,函数名传参数
def foo(a,b): print(a,b) foo("hello",'world') foo(b='world',a="hello")
3,可变长度参数
def foo(arg1,*tupleArg,**dictArg): print("arg1=",arg1) #arg1=leason print("tupleArg=",tupleArg) #() print("dictArg=",dictArg) #[] foo("leason")
4,接受不定长参数*args
# 接收不定长参数*args def fun_var_args(farg, *args): print("arg:", farg) for value in args: print("another arg:", value) fun_var_args(1, 2, 3) # *args可以当作可容纳多个变量组成的list
*args可以当作可容纳多个变量组成的list
# 传收不定长参数*args def fun_var_args_call(arg1, arg2, arg3): print("arg1:", arg1) print("arg2:", arg2) print("arg3:", arg3) args = [2, 3] #list fun_var_args_call(1, *args)
5,传收不定长参数**kwargs
# 接收不定长参数**kwargs def fun_var_kwargs(arg1, **kwargs): print("arg1:", arg1) for key in kwargs: print("%s: %s" % (key, kwargs[key])) fun_var_kwargs(arg1=1, arg2=2, arg3=3) # **kwargs可以当作容纳多个key和value的dict
**kwargs可以当作容纳多个key和value的dict
# 传收不定长参数**kwargs def fun_var_args_call(arg1, arg2, arg3): print("arg1:", arg1) print("arg2:", arg2) print("arg3:", arg3) kwargs = {"arg3": 3, "arg2": 2} # dictionary fun_var_args_call(1, **kwargs)
# 接收不定长参数**kwargs def fun_var_kwargs(arg1, **kwargs): print("arg1:", arg1) print('kwargs=',kwargs) for key in kwargs: print("%s: %s" % (key, kwargs[key])) kwargs = {"arg3": 3, "arg2": 2} # dictionary fun_var_kwargs(arg1=1, **kwargs) # **kwargs可以当作容纳多个key和value的dict
6,匿名函数
add=lambda x,y:x+y print(add(1,2)) a=[1,2,-1,3] b=sorted(a,key=lambda x:abs(x)) print(a) print(b)
三,函数的作用域
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
g_count = 0 # 全局作用域 def outer(): o_count = 1 # 闭包函数外的函数中 def inner(): i_count = 2 # 局部作用域
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:
if True: msg = 'I am from Runoob' print(msg)
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
total = 0 # 这是一个全局变量 # 可写函数说明 def sum(arg1, arg2): # 返回2个参数的和." total = arg1 + arg2 # total在这里是局部变量. print("函数内是局部变量 : ", total) return total # 调用sum函数 sum(10, 20) print("函数外是全局变量 : ", total)
global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
以下实例修改全局变量 num
num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num) fun1() print(num)
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num) outer()
四,函数返回值
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
def sum(arg1, arg2): # 返回2个参数的和." total = arg1 + arg2 print("函数内 : ", total) return total # 调用sum函数 total = sum(10, 20) print("函数外 : ", total)