函数返回值return及函数作用域

函数的返回值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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值