首页 > 代码库 > Python基础day-6[函数,命名空间,作用域]
Python基础day-6[函数,命名空间,作用域]
函数的返回值
通常有参函数是需要返回值的。
返回值的几种形式:
1.如果函数内没有return就返回None
2.return 返回的数据类型没有限制,也可以返回多个值,以元组形式,括号可加可不加
return的效果:
终止函数的执行,只能返回一次值.
函数参数的使用
python是一种弱类型的语言,参数可以传入任何类型数据
形参与实参:可以理解为形参就是变量名,而实参就是变量值
def foo(x,y) #x,y 是形参
return x+y
foo(1,2) #1,2 是实参
位置参数:按照从左到右的顺序依次定义的参数叫位置参数。
def foo(x,y): #按位置定义的形参,必须被传值,多一个少一个都不行。
print(x)
print(y)
foo(1,2) #按位置定义的实参,会一一跟形参对应。
关键字参数:指的是实参在定义时,按照key=value形式定义。
def foo(x,y): #形参还是按位置定义的。
print(x)
print(y)
foo(y=1,x=2) #打破位置的限制,不需要跟形参一一对应,直接指定传值。但是还要遵循不能多不能少。
注意的问题:
1.位置实参可以和关键字实参混合使用,但是位置实参必须在关键字实参的前面。
2.位置实参可以和关键字实参混合使用,但是一个形参只能被传值一次不能被重复传值。
默认参数:定义函数阶段,就已经为形参赋值。
def foo(x, y=10): # 形参在定义的时候赋值。
print(x)
print(y)
foo(x=2) # 实参可以不输入对应的形参,如果输入了就不使用默认参数。
注意的问题:
1.必须放在位置参数后面。
2.默认参数通常要定义成不可变类型。
3.默认参数只在定义时被赋值一次。
形参的应用:值经常变化的需要定义成位置形参,值大多数情况下都一样需要定义默认参数。
实参的应用:怎么爽怎么用,但是要遵循相应的规则。
可变长参数:可变长值得是实参的个数不固定 *号等同位置参数
按位置定义的可变长实参:*
按关键字定义的可变长实参:**
def func(x,y,*args): #x=1 y=2, args=(3,4,5,6)元组形式
print(x,y)
print(args)
func(1,2,3,4,5,6) #实参为位置参数使用*args
func(1,2,*(3,4,5,6)) #等同于 func(1,2,3,4,5,6)
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py 1 2 (3, 4, 5, 6) 1 2 (3, 4, 5, 6) Process finished with exit code 0
def func(x, y, **kwargs): # x=1 y=2, kwargs={‘z’:6} 字典形式
print(x, y)
print(kwargs)
func(x=2, y=4, z=6) #实参为关键字使用**kwargs
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py 2 4 {‘z‘: 6} Process finished with exit code 0
命名关键字参数:*后面定义的形参(*,name,age)必须以关键字形式被传值
def regist(*,name,age):
print(name)
print(age)
regist(name=‘abc‘,age=11)
D:\Python\Python36-32\python.exe E:/Python/DAY-6/tmp.py abc 11 Process finished with exit code 0
形参:位置参数,默认参数,*.args 命名关键字参数,**kwargs #一般定义形参就按照这种顺序
函数的嵌套调用
def max2(x,y):
if x > y:
return x
else:
return y
def mx4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3
函数的嵌套定义:函数中定义函数,并且只能在同级调用
def f1():
def f2():
def f3:
print(‘f3‘)
print(‘f2‘)
print(‘f1‘)
名称空间与作用域
命名空间:存放名字与值的绑定关系
种类:
内置名称空间
内置在Python解释器内的自带的名字,解释器一启动就生成这个空间
全局名称空间
文件级别定义的名字都会存放于全局名称空间,执行python文件时会产生,下面示例
x = 1
def func():
pass
class foo:
pass
import os
if 1 > 2:
y = 3 #这里y没有顶头写但也是全局变量
局部名称空间
定义在函数内部的名字,
局部名称空间只有在调用函数的时候生效,执行完毕失效
三种加载顺序:内置=====>全局======>局部
取值:局部>全局>内置
示例:
max = 10
def tmp():
max = 20
print(max)
tmp() #会打印出20 因为局部优先于全局
作用域:作用范围
种类:
全局作用域
内置名称空间和全局名称空间的名字,作用范围是全局范围。在整个文件的任意位置都能被引用,全局有效。
局部作用域
局部名称空间中的名字,作用范围是局部范围生效。只在函数内部可被引用,局部有效
局部作用域=====>全局作用域
函数的作用域在定义的时候就已经固定死了。
补充:
搜寻变量时,只能由“内”看“外”。不可以反过来。例如在函数内部定义的变量,无法在全局被直接引用。
但是如果在函数内部引用一个变量,但是函数内没有定义,那么会去全局作用域搜寻变量。
x = 1
def func():
x =2
print(globals()) #打印全局作用域name
print(locals()) #打印局部作用域name
func()
函数对象:函数是第一类对象,指的是函数可以被当数据传递
可以被引用,可以当函数的返回值,可以当容器的元素
Python基础day-6[函数,命名空间,作用域]