2020-10-29

本文深入探讨了Python中的闭包概念,通过示例解释了闭包如何保留外部函数的局部变量。同时,介绍了lambda函数、map函数的使用,以及复数的表示和操作。此外,还讨论了__name__变量在模块导入和执行中的作用,以及相关代码执行顺序的理解。
摘要由CSDN通过智能技术生成
  1. 当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包,以下代码输出值为:
def adder(x):
    def wrapper(y):
        return x + y
    return wrapper
adder5 = adder(5)
print(adder5(adder5(6)))

答案:16. 闭包:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束
题目中,第一个adder5=adder(5)结束后,x=5,adder返回值为wrapper。
adder5(6),此时wrapper(6),所以值为11,x为5。
adder5(adder5(6)),同理,11+5=16.

  1. 下列程序运行结果为:
a=[1, 2, 3, 4, 5]
sums = sum(map(lambda x: x + 3, a[1::3]))
print(sums)

答案:13. lambda函数的形状是:lambda 参数:一句话函数体(默认返回函数体内执行的内容)
map() 函数语法:map(function, iterable, ...)
示例:

>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
 
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

2篇好博文:python中的map函数
python lambda函数

  1. 关于Python中的复数,下列说法错误的是()
    a. 表是复数的语法是real + image j
    b. 实部和虚部都是浮点数
    c. 虚部必须后缀j,且必须小写
    d. 方法conjugate返回复数的共轭复数
    答案:c。虚部的后缀可以是 “j” 或者 “J”

  2. 已知print_func.py的代码如下:

print('Hello World!')
print('__name__value: ', __name__)
 
def main():  
    print('This message is from main function')
 
if __name__ =='__main__':
    main()

print_module.py的代码如下:

import print_func
print("Done!")

运行print_module.py程序,结果是:
答案:

  • 需要说明的是,如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入python if __name__=='__main__':,这样的话除非直接运行该模块,if条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是"__main__"。
  • __name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“mian:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“__mian__:”后面的内容。
Hello World!
__name__value:  tmp
Done!
  1. 下列表达式的值为True的是
    a. 5+4j > 2-3j
    b. 3>2>2
    c. (3,2)< (‘a’,‘b’)
    d. ’abc’ > ‘xyz’
    答案:c.复数不支持比较大小; 类似元组、字符串、列表这类格式,在进行两者之间的比较时,先从第一个元素开始比较 ASCII 码值大小,如果相等,则依次向后比较,如果全部相等,则比较数量大小,ASCII码中小写字母>大写字母>数字. b选项中,python中Ture=1,False=0

参考:
python中__name__的使用
牛客网

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值