Python基础刻意练习:函数与lambda表达式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44568780/article/details/102757979

本系列定位为复习笔记,某些内容并未提及。
在此记录一些典型疑问和我在学习中的问题或经常遗忘的细节,也会添加一些觉得有意思的部分(其实就是随心所欲
内容主要使用代码进行传达

函数的定义与调用

def printme(str):
    print(str)
printme("1")
printme("2")
temp = printme('hello')
print(temp)


=================== RESTART: C:\Users\雨田人尹\Desktop\test.py ===================
我要调用用户自定义函数!
再次调用同一函数
hello
None
#由于函数没有设置return返回值,因此temp被赋予了None对象


函数的参数:

三种最常见与使用的参数:

  • 位置参数
  • 默认参数
  • 可变参数


(关键字参数,命名关键字参数)
可变参数是一个元组

def add(x, y=23, *var):
    print(x)
    print(y)
    print(var)

    
 #warining 此处输入参数的方式,默认参数一般放最后要好一点!!!!!!!!!

>>> add(2)
2
23
()
>>> add(2,3)
2
3
()
>>> add(2,3,5)
2
3
(5,)
>>> add(2,y=3,3,4)
SyntaxError: positional argument follows keyword argument
>>> add(2,y=3)
2
3
()

global与nonlocal关键字的使用:

global用于申明函数外的变量,为整个程序的全局变量
nonlocal主要用于实现闭包内嵌函数,在函数中,使用递归时设置一个函数内的局部的全局变量

num = 1


def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)  # 1
    num = 123
    print(num)  # 123


fun1()
print(num)  # 123


def add():
    a=1
    def add2():
        nonlocal a
        a+=1
        return a
    print(add2())
    
    
=================== RESTART: C:\Users\雨田人尹\Desktop\test.py ===================
>>> add()
2

如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域。

def funX(x):
    def funY(y):
        return x * y

    return funY


i = funX(8)
print(type(i))  # <class 'function'>
print(i(5))  # 40

递归

递归可参考我力扣刷题的递归类题型

lamda表达式的应用

filter lambda map与列表推导式,3元判断符

>>> list(filter(lambda x : 1 if x%3==0  else 0,range(0,101) ))
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
>>> [x for x in range(0,101) if x%3==0]
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
>>> [x%3 for x in range(0,101) if x%3==0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>>list(map(lambda x:[x**2,x],range(11)))
[[0, 0], [1, 1], [4, 2], [9, 3], [16, 4], [25, 5], [36, 6], [49, 7], [64, 8], [81, 9], [100, 10]]
>>>list(zip([1,3,5,7,9],[2,4,6,8,10]))
[(1,2),(3,4),(5,6),(7,8),(9,10)]
>>>list(map(lambda x,y:[x,y],[123,1234,231,123],[123,123,342,3456143,2,25]))
[[123, 123], [1234, 123], [231, 342], [123, 3456143]]
#map()后面可以接受多个序列作为参数

猜你喜欢

转载自blog.csdn.net/weixin_44568780/article/details/102757979
今日推荐