Python疑难杂症(13)---Python的几个比较难理解的内置函数,包括range、zip、map、lambda、filter、exec、compile、globals等

1、range()

range(start=0, stop[, step=1]) 构造器的参数必须为整数(可以是内置的 int 或任何实现了 __index__() 特殊方法的对象)。生成一个startstop的数组,左闭右开, 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。

list(range(6))

[0, 1, 2, 3, 4, 5]

list(range(1, 10))

[1, 2, 3, 4, 5, 6, 7, 8, 9]

list(range(0, 15, 5))

[0, 5, 10,]

list(range(0, 10, 3))

[0, 3, 6, 9]

2、zip()

zip() 将多个迭代对象聚合在一个元组中,然后返回它。zip 可以接受任何类型的可迭代对象,例如文件、列表、元组、字典、集合等。

语法:zip(iterable, ...)

numbers = [1,2,3,4]

characters = ['A','B','C','D']

zipped = zip(numbers,characters)

print(zipped) # <zip object at 0x000001F8D8B8B848>

print(list(zipped)) # [(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]

print(tuple(zipped)) # (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]

zipped_2 = zip(numbers,characters)

n , c = zip(*zipped_2) 

print(n) # (1, 2, 3, 4)

print(c) # ('A', 'B', 'C', 'D')

3、map()

map() 函数接收两个参数:函数和迭代对象,并返回一个迭代器,迭代器是函数作用在输入的迭代对象上。

语法:map(func, iterable)

求立方

def cube(n):

     return n*n*n

numbers = [1,2,3,4,5]

for i in map(cube,numbers):

    print(i) # 1 8 27 64 125

#四舍五入

numbers = [1.2324,5.6443,9.4524,6.322]

for i in map(round,numbers):

    print(i) # 1 5 10 6

4、 lambda()

Lambda 函数也称为匿名函数,因为它没有函数体并且不需要 def 关键字来定义。Lambda 函数可以有任意数量的参数,但其中只能有一个表达式。表达式计算并返回。它没有返回语句。

语法:lambda [arg1 [,arg2,.....argn]]:expression

#和上个例子一样的效果

cube = lambda x: x*x*x

numbers = [1,2,3,4,5]

for i in map(cube,numbers):

print(i) 输出: 1 8 27 64 125

#便捷用法:

numbers = [1,2,3,4,5]

for i in map(lambda x: x*x*x,numbers):

    print(i) # 1 8 27 64 125

5、filter()

filter(function, iterable ) 函数接收两个参数:函数和迭代器,并返回一个迭代器,迭代器是函数作用在输入的迭代对象上为真的值。区别于 map() 函数, filter() 函数接收的函数必须返回 True 或 False, 并且不是返回函数值,而是返回真值位置的输入值。

语法:filter(func, iterable)

numbers = [1,2,3,4,5,6,7,8,9,10]

check_even = lambda x: x%2 == 0 # 判偶数

for i in filter(check_even,numbers):

print(i) # 2 4 6 8 10

6exec()

该函数用于执行字符串或代码对象,可以动态执行用户输入的表达式、动态执行动态生成的代码块等。但是需要注意安全风险,应该避免执行不可信的代码;因为执行了不安全或未经验证的代码会引起安全隐患, 需要谨慎使用。

示例如下:

exec('print("Hello, World!")')

7 compile()

用于将字符串形式的源代码编译为代码对象或 AST(抽象语法树)对象。常用于将字符串形式的源代码编译为可执行的代码对象,动态创建并执行代码。例如在动态生成代码时,可以使用 compile() 将字符串编译为可执行的代码对象。

示例如下:

code1 = 'print("Hello, World!")'

com_code = compile(code1, '<string>', 'exec')

exec(com_code)

8 globals()

我们知道全局变量在局部作用域中只能访问,无法修改。这个函数返回实现当前模块命名空间的字典。对于函数内的代码,这是在定义函数时设置的,无论函数在哪里被调用都保持不变。当然也可以单独回去某一个全局变量的值。

示例如下:

global_var = 10

def test_function():

    local_var = 20

    print(globals()['global_var'])

test_function()

9 locals()

返回当前局部符号表的字典,可以用于获取局部变量的值或在局部作用域中执行代码。常用于动态获取局部变量的值,或者在函数内部访问局部变量。

示例如下:

def test_function():

    local_var = 20

    print(locals())

test_function()

只显示函数内的local_var这个变量:{'local_var': 20}

欢迎评论、交流、点赞、收藏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值