python基础07--函数
1.1 函数
1、函数的返回值,return 当函数结束的时候,给调用方一个结果
a 只要函数执行到return 函数就会停止执行 ,函数中可以有多个return
b 函数中如果不写return,默认返回None
c 函数中只写一个return,也是返回None
d return 一个返回值, 调用方能接受一个返回值
e return 多个返回值, 多个值需要用,隔开 接受的时候是tuple类型的数据
return ‘大妈’,’小护士’,’老师’
2、函数的参数
def 函数名(形参):
函数体
函数名(实参) 调用
多参数的时候,形参和实参需要个数一样
站在实参的角度:
a 位置参数
def zhuang(name,age): print("my name is %s ,my age is %s"%(name,age))
调用zhuang("zhuang",30)
b 关键字参数
def zhuang(name,age): print("my name is %s ,my age is %s"%(name,age))
调用zhuang(name = "zhuang",age = 30)
c 混合参数,注意顺序,先写位置参数,在写关键字参数
def zhuang(name,age,high): print("my name is %s ,my age is %s"%(name,age))
调用zhuang("zhuang",age = 30,high = “165”)
站在形参的角度:
a 位置参数
def zhuang(name,age,high): print("my name is %s ,my age is %s"%(name,age))
调用zhuang("zhuang",age = 30,high = “165”)
b 默认值参数 默认值调用时,可以用age=40 或者直接写 40
def zhuang(name,age=30): print("my name is %s ,my age is %s"%(name,age))
调用zhuang("zhuang")
调用zhuang("zhuang",40)
c 位置参数和默认值参数 先写位置参数,然后写默认值参数
3、形参的不定参数:*args **kwargs
顺序: 位置参数,*args, 默认参数, **kwargs
def(a,b,c,*args,d=”women”,**kwargs):
def func(a,b,c,*args,d=5) 这种d会生效
func(1,2,3,4,5,6,7)
动态参数接受到的是tuple类型的数据
*args 动态接受位置参数
**kwargs 动态接受关键字参数
def func(**kwargs):
func(a=”women”,b=”29”,c=”ben”)
4、实参* **
*:站在实参的角度上,给一个seq加上*,就是将这个序列按照顺序打散
seq: 任何序列,列表,字符串,元组,字典(字典的key值)
**: 打散字典
def func(*args):
print(args)
lis=[1,2,3]
func(*lis) #打散
5、* 在调用函数的时候打散 在接受的时候聚合
6、作用域
命名空间既 变量或者函数的名称
a内置命名空间,python提供的
b 全局命名空间,直接在py文件中声明出来的变量
c 局部命名空间,在函数内声明的变量和函数
d 加载顺序 内置>全局>局部
e 取值顺序 局部>全局>内置 就近原则
内部函数使用外部函数的数据
a = “zhuang” 全局
def func(): 全局
a = “马化腾” 局部
print(a)
def funb(): 局部
print(women)
作用域:
a 全局作用域:全局命名空间+内置命名空间
b 局部作用域: 局部作用域
c globals() 获取全局作用域
locals() 查看当前作用域中的名字
7、补充
对于不可变数据类型,在局部可以查看到全局作用域中的变量,但是不能修改,如果想要修改,需要添加global声明
如果在一个局部(函数)内声明了一个global变量,那个这个变量在局部的所有操作对全局的变量有效
a = 1
def func():
print(a) #调用函数打印 1
a=1
def func()
a+=1 #调用函数时报错,
8、函数的嵌套
9、global 和 nonlocal
global 函数内部声明改变量为全局变量
nonloclal 声明局部作用域中离他最近的变量引用过来
声明后的变量,修改后则影响既修改的是原作用域中的数据
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
输出结果: 1 123
num = 20
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner() #函数嵌套,调用inner()
print(num)
outer()
输出结果: 100 100
10、函数
如果形参的默认参数是一个可变类型数据,那么每一次调用函数的时候,如果不传值就会公用这个数据类型的资源
不可更改:字符串,数字,元组 函数内修改不影响
可更改: 列表,字典 函数内修改,影响外部的参数