万能参数
*的魔性用法
-
#万能参数 可以接受所有的实参。 万能参数:*args,约定俗称:arge 函数定义时,*代表聚合。他将所有的位置参数聚合成一个元祖,赋值给了args。 def eat(*args): print(args) print('我请你吃:%s,%s,%s,%s,%s,%s'%args) eat('蒸羊羔','蒸熊掌','蒸鹿影','烧花鸭','烧雏鸡','烧子鹅') #写一个函数:计算你传入函数的所有数字的和。 def func(*args): count=0 for i in args: count+=i return count print(func(1,2,3,4,5)) **kwargs 函数的定义时:**将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs def func(**kwargs): print(kwargs) func(name='alex',age=73,sex='laddyboy')
-
万能参数:*args,**kwaygs, def func(*args,**kwargs): print(arhs) print(kwargs) func() #在函数调用时,*代表打散。**代表打散字典 def func(*args,**kwargs): print(args) print(kwargs) func(*[1,2,3,4],*[22,33]) #func(1,2,3,22,33) func(**{'name':'太白'},**{'age':18}) #func(name='太白',age='18')
-
仅限关键字参数(了解)
-
形参的最终顺序
-
#形参角度的参数顺序 *args的位置 def func(*args,a,b,sex='男'): print(a,b) func(1,2,3,4) #args得到实参的前提,sex必须被覆盖 def func(a,b,*args,sex='男'): print(a,b) print(sex) print(args) func(1,2,3,4,5,sex='女') #**kwargs 位置 def func(a,b,*args,sex='男',**kwargs): print(a,b) print(sex) print(args) print(kwargs) func(1,2,3,4,5,sex='女',name='alex',age=80) #形参角度第四个参数:仅限关键字参数(了解) def func(a,b,*args,sex='男',c,**kwargs): print(a,b) print(sex) print(args) print(c) print(kwargs) func(1,2,3,4,5,sex="女",c='666',name='alex',age=80) #形参角度最终的顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
-
-
名称空间
-
全局名称空间
-
局部名称空间
-
加载顺序,取值顺序
#命名空间。 #python分为三个空间 #内置名称空间(builtins.py) #全局名称空间(当前py文件) #局部名称空间(函数,函数执行时才开辟) #加载顺序: #内置命名空间--->全局名称空间--->局部名称空间(函数执行时) #取值顺序(就近原则)单项不可逆 LEGB原则 def func(): print(input) func() #(从局部找时)局部名称空间--->全局名称空间--->内置名称空间 input = '太白金星' def func(): input = 'alex' func() print(input)
-
作用域。
#两个作用域;
#全局作用域:内置名称空间
#局部作用域:局部名称空间
局部作用域可以引用全局作用域的变量
date = '星期五'
def func():
a = 666
print(date)
print(a)
func()
print(a)
局部作用域不能改变全局变量。
count = 1
def func():
count += 2
print(count)
func() # local variable 'count' referenced before assignment
局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改
解释器会认为你在局部已经定义过这个去不得变量了,他就从局部找这个局部变量,报错了。
#可以使用,不能修改
def func():
count = 1
def inner():
print(count)
inner
func()
函数的嵌套(高阶函数)
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
print(4)
func1()
print(1)
func2()
print(2)
#in func1 3 1 in func2 4 2
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
func1()
print(4)
print(1)
func2()
print(2)
def func2():
print(2)
def func3():
print(6)
print(4)
fun3c()
print(8)
print(3)
fun2()
print(5)
内置函数 globals locals
a = 1
b = 2
def func():
name = 'alex'
age =73
print(globals())#返回的是字典:字典里面的键值对:全局作用域的所有内容
print(locals())#返回的是字典:字典里面的键值对:当前作用域的所有内容
print(globals())#返回的是字典:字典里面的键值对,全局作用域的所有内容
print(locals())#返回的是字典:字典里面的键值对:当前作用域的所有内容
func()