python learning day6 --函数

定义函数

在python中定义函数的样子:

def function_name(..):
	...
	...
	...
	return ..
def abs(x):
    if x>=0:
        return x
    else:
        return -x

print(abs(-3))

函数以return 结束,如果不需要返回什么值,直接写return就可以,也可以是return None.
函数的返回值可以是多个值,例如return x,y
但是返回多个值的场合也是可以用一个值来代替的,因为当python返回多个值时,它其实返回的额是一个元组,只不过多个值时,它自动按照位置将元组的元素依次赋给要return的变量。而当用一个值代替时它返回的就是那个元组。

函数的参数

默认参数

当对应位置没有传入参数时,该位置的参数使用定义时定义好的默认参数
比如,计算最多三个数的和

def sum1(a=0,b=0,c=0):
    return a+b+c
print(sum1(1,2,3))#6
print(sum1(1,2))#3

这样,如果定义时就给了形参一个值,那么它就是默认参数
那么,传递参数的顺序一定要相同吗?或者说,python一定是按参数的位置顺序给函数传值吗?

def sum2(a=0,b=0,c=0):
    return a+b-2*c
print(sum2(c=2,b=1,a=1))#-2

如果按顺序那么:2+1-2=1;如果不是:1+1-4=-2。这就说明当明确给值时它按给的值算。

可变参数

当不知道参数的个数具体有多少时,使用* 加在形式参数前面

def sum3(*n):
    totall=0
    for i in n:
        totall+=i
    return totall

print(sum3(1,3,5,-1,-3,-5)#0

传入的1,3,5,-1,-3,-5几个值,返回的结果是0,*n是可迭代对象

作用域

想用foo改变a的值,注释掉的方法是不行的,因为在foo的a的作用域仅仅是foo这个函数
如果想访问全局变量a那么在前面加global就好了。如果全局作用域中没有a,那么下面一行的代码就会定义变量a并将其置于全局作用域。同理,如果我们希望函数内部的函数能够修改嵌套作用域中的变量,可以使用nonlocal关键字来指示变量来自于嵌套作用域。

def foo():
    global a
    a = 2
    print(a)  # 200


if __name__ == '__main__':
    a = 1
    foo()
    print(a)  # 2
'''
def foo():
    a=2
    print(a)  # 200


if __name__ == '__main__':
    a = 1
    foo()
    print(a)  # 1
'''

因python中可以嵌套函数,那么一个函数访问变量的顺序:“局部作用域”->“嵌套作用域”->“全局作用域”->“内置作用域”。可以对比下面几种结果。

def find():
    c=1
    #fa()
    b=a+c
    def fa():
        a=1
        return
    fa()
    return b
a=0

print(find())#1

def find():
    c=1
    #fa()
    def fa():
        a=1
        return
    fa()
    b=a+c
    return b
a=0

print(find())#1
'''
def find():
    c=1
    #fa()
    def fa():
        a=1
        return a
    fa()
    b=a+c
    return b
#a=0

print(find())#name 'a' is not defined
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值