函数

函数

一.函数的基础用法
1.函数的定义
def my_add(a, b):
    """
    计算两个数的和
    :param a:第一个数
    :param b:第二个数
    :return:返回的和
    """
    c = a + b
    return c

res = my_add(3,4)
print(res)
2.函数的默认值,直接调用等
def my_add(a, b, c=666, d=44):
    print(c)
    print(d)


my_add(3, 4, d=3)

[外链图片转存失败(img-4PlqXS9f-1564987369981)(../../AppData/Roaming/Typora/typora-user-images/1562635978154.png)]

这里说明一下,函数的默认值必须放在最后,而关键字调用的话要也要放在后面,不过这个东西实在不行就试试就行,也不用太多记

def my_add(a, b, c=666, d=44):
    print(a)
    print(b)
    print(c)
    print(d)


# my_add(3, 4, d=3)
my_add(b=3, a=5)

[外链图片转存失败(img-f0IzDkJd-1564987369982)(../../AppData/Roaming/Typora/typora-user-images/1562636334913.png)]

这是显示说明关键字取值可以不按照顺序,只要记住永远让位置参数放前面就行

3.不定长接收(args,kwargs)

args是元组,接收的是值,而kwargs接受的是键值对

def run(*args,**kwargs):
    print(args)      #元祖
    print(kwargs)    #字典
    print(type(args))
    print(type(kwargs))

run(3,4,a=5,b=6)

[外链图片转存失败(img-BvEDa1OU-1564987369983)(../../AppData/Roaming/Typora/typora-user-images/1562640319547.png)]

输入调用严格按照顺序

def run(*args,**kwargs):
    print(args)      #元祖
    print(kwargs)    #字典
    
list1 = {1,2,3,4,5}
tuple1 = (2,4,6)
run(*tuple1)
dict1 = {'zxc': 4, 'na': 2}
run(*list1,**dict1)

[外链图片转存失败(img-czaImqG2-1564987369983)(../../AppData/Roaming/Typora/typora-user-images/1562641142853.png)]

记住导入list,dict,tuple等时候一定要加*,**不然会出问题,具体问题具体分析。

4.内置函数

file:///C:/Users/%E5%BC%A0%E5%AD%A6%E6%88%90/AppData/Local/Temp/BNZ.5d2409b25956ad8/6.21/07-python3%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%E5%A4%A7%E5%85%A8%20(1).html

这是调用链接,忘记怎么用就百度

def test1(w):
    if w > 2:
        return w
a = 'c+d+f'
c = 1
d = 2
f = 3
print(eval(a))
l1 = [c, d, f]
print(list(filter(test1, l1)))

[外链图片转存失败(img-BkyoRVyl-1564987369983)(../../AppData/Roaming/Typora/typora-user-images/1562647936122.png)]

这是两个过滤器,eval可以去掉括号来执行,而filter()可以直接加上函数来运行,实现过滤,map可以将数据放入函数里面批量操作

def test1(w):
    return 10*w
a = 'c+d+f'
c = 1
d = 2
f = 3
print(eval(a))
l1 = [c, d, f]
print(list(map(test1, l1)))

[外链图片转存失败(img-U63GMa11-1564987369984)(…/…/AppData/Roaming/Typora/typora-user-images/1562651842399.png)]

zip函数,功能很好,能拼接成字典

l1 = [1, 12, 3, 3]
l2 = ['x', 'y', 'u', 'w']
print(dict(zip(l1,l2)))

[外链图片转存失败(img-cATyQPYV-1564987369984)(../../AppData/Roaming/Typora/typora-user-images/1562652490087.png)]

不过这些后来都要进行格式转换,因为返回的都是地址

二.函数作用域
num = 100
def test():
    num = 200
    print(num)

print(num)
test()
print(num)

[外链图片转存失败(img-K3kplIvZ-1564987369985)(../../AppData/Roaming/Typora/typora-user-images/1562662765762.png)]

2.1.函数中定义全局变量(global)
num = 100
def test():
    global num
    num = 200
    print(num)

print(num)
test()
print(num)

[外链图片转存失败(img-rT7f2Yu5-1564987369985)(../../AppData/Roaming/Typora/typora-user-images/1562666228060.png)]

2.2函数上一级的变量nonlocal
def test1():
    num = 100

    def test2():
        nonlocal num
        num = 200
        print(num)

    test2()
    print(num)

test1()

[外链图片转存失败(img-GsUJDLgs-1564987369986)(../../AppData/Roaming/Typora/typora-user-images/1562668336430.png)]

注意:定义的时候不能是上一级没有的变量

三.函数的闭包
def test(num1):
    print(num1)

    def test1(num2):
        res = num1 + num2
        return res

    return test1


res = test(66)
print(res(88))

[外链图片转存失败(img-UtjUWzYS-1564987369986)(../../AppData/Roaming/Typora/typora-user-images/1562676288959.png)]

这就是闭包。其实第一次res = test(66)执行后的res就已经是test1了,所以这样res不调用就不会被释放掉因为是函数没调用这样就能保留数据了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值