函数的返回值return 通过关键字return来定义
不写return或者return关键字后面不写内容就返回None
return后面写一个值就返回该数据(注意,return (5)>>返回的是数据5,因为(5,)才是元组)
return后面写一个以上值默认返回元组,如果内部有定义数据类型如列表,则返回定义的数据类型就是列表
函数执行到return就会结束函数的运行,并返回结果,函数内后面的代码不再执行(类似循环中的break)
根据实际应用场景判断是否需要return,需要返回结果就写return,不需要返回结果只是执行函数内部代码则不用写return
可通过按住Ctrl+鼠标左键点击函数名字查看是否有返回值,如图:
def func(a,b):
c= a+b
d=a-b
return a,b,c,d # 可以返回多个值默认保存在元组中(内部没有定义数据类型),使用逗号隔开
print(func(11,22)) (11, 22, 33, -11)
def func(a,b):
c= a+b
list=[]
list.append(c)
return list # 内部定义了列表,返回的是列表
print(func(11,22)) [33]
def func(a,b):
c= a+b
d=a-b
return f'a+b={c}\na-b={d}' # return后面可以用f表达式,使用\n换行格式化输出
print(func(11,22))
a+b=33
a-b=-11
函数作用域
全局变量:python中直接定义在模块中的变量,在该文件任何地方都可以使用包括函数
局部变量:定义在函数中的变量,只能在该函数内部使用;
不过可以在函数内部声明全局变量,使用关键字global
def demo():
global aa,bb # 函数内部声明全局变量,可以一次声明多个,用逗号隔开;不可
global aa=100否则报错SyntaxError: invalid syntax;先声明再定义,不可先定义再声明报错
SyntaxError: name 'cc' is assigned to before global declaration
aa = 100
bb = 200
demo() # 需调用该函数后全局变量才生效,否则直接打印报错aa,bb未被定义NameError:
name 'aa' is not defined
print(aa,bb) 100 200
aa=101 # 先定义全局变量aa=101
def demo():
global aa,bb # 函数内声明全局变量aa=100,如果调用该函数则覆盖之前的aa,如果没调用该函数则aa=101
aa = 100
bb = 200
demo() # 如果调用该函数则覆盖之前的aa,如果没调用该函数不执行则aa=101
print(aa,bb) 100 200
aa=101 # 先定义全局变量aa=101
def demo():
aa = 100 # 函数内定义局部变量aa=100
bb = 200
print(aa) 100 # 函数内使用aa则aa=100,就近原则;如果函数内部没有定义该变量再去函数外面找这个变量的值
demo()
print(aa) 101 # 函数外使用aa则aa=101
aa=101
def demo():
bb = 200
print(aa) # 函数内部使用aa变量时python会先在函数内部查找有无定义该函数的局部变量(即就近原则),如果有则必须先定义再使用否则报错UnboundLocalError: local variable 'aa' referenced before assignment
return # 所以定义局部变量的时候尽量不要和全局变量名字重名,否则会发生很多问题
aa=100
demo()
print(aa) 报错UnboundLocalError: local variable 'aa' referenced before assignment
aa=101
def demo():
global aa,bb
bb = 200
print(aa) 101 # 打印上面定义的aa=101
aa=100 # 由于上面声明aa是全局变量且调用的该函数,则此处定义的aa相当于在函数外部定义的全局变量,覆盖之前的101
print(aa) 100 # 由于上面声明aa是全局变量且调用的该函数,则此处定义的aa相当于在函数外部定义的全局变量,覆盖之前的101所以会打印100
demo()
print(aa) 100 # 调用函数,执行函数代码函数内声明的全局变量生效并覆盖之前的aa所以打印100;如果没有调用函数,函数内部声明的全局变量不生效也不会产生覆盖,则会打印aa=101
username = 'xigua'
def change_username():
global username
username = 'da' + username # 如果不声明全局变量此处会报错,要么声明全局变量这样相当于重新赋值,要么换个变量名字如new_username = 'da' + username才行
print(username)
change_username() daxigua
print(username) daxigua