内置函数及匿名函数

Posted 小杜要加油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置函数及匿名函数相关的知识,希望对你有一定的参考价值。

1、作用域相关:globals()和locals()

  globals():全局作用域中的变量,无论放在全局命名空间还是在局部命名空间,输出结果一样,都是全局中的变量

  locals():放在全局命名空间时和globals()效果一致,放在局部命名空间输出局部空间的变量

def func():
    x = 1
    y = 2
func()
print(locals())
print(globals())
#输出结果一致,均为全局变量
def func():
    x = 1
    y = 2
    print(locals())  # {‘y‘: 2, ‘x‘: 1}
    print(globals())    
func()
#前者输出局部变量,后者输出全局变量

2、迭代器/生成器相关:range()、iter()、next()

  range(n):可迭代对象,可用于for循环得到0-n间的整数,包括0,不包括n

print(range(10))             #结果为:range(0,10)
for i in range(10):
    print(i)                 #结果为:0 1 2 3 4 5 6 7 8 9

  iter():将可迭代对象转变为迭代器,等价于:可迭代对象.__iter__()

from collections import Iterable
from collections import  Iterator
lst=[1,2,3,4,5]
print(isinstance(lst,Iterable))                  #输出结果:True---是否可迭代对象
print(isinstance(lst.__iter__(),Iterator))       #输出结果:True---是否迭代器
print(isinstance(iter(lst),Iterator))            #输出结果:True---是否迭代器

  next():返回迭代器的下一个值。next(迭代器)等价于迭代器.__next__()

eg:1、
k=iter([1,2,3,4]) print(k.__next__()) #输出结果为:1 print(next(k)) #输出结果为:2
eg:2、
k=iter([1,2,3,4]) # __iter__([1,2,3,4]) while True: try: print(next(k)) except StopIteration: #超出迭代器的层数就退出循环 break

3、字符串类型python代码执行相关:eval()、exec()、compile()

  eval():执行字符串表达式,并返回表达式的值

print(eval(2*2))                             #输出结果:4
x=3
print(eval(7*x))                             #输出结果:21

  exec():执行字符串代码,无返回值

exec ("print(‘12345‘)")  # 12345  用于流程性代码的执行
eval("print(‘12345‘)")  # 12345   可以以python代码的形式执行一个字符串
print(exec(12345))     # None    exec 没有返回值 
print(eval(12345))   # 12345     eval 有返回值  用于值计算的时候
exec("print(‘12345‘)")  # 12345
eval("print(‘12345‘)")  # 12345
print(exec(1+2+3-4))  # None  没有返回值
print(eval(1+2+3-4))  # 2
a = 1+2+3-4
print(1+2+3-4)           # 2

   compile  将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。

参数说明:   

1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。  

2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。  

3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为‘single‘。

code1 = for i in range(0,10): print (i)
compile1 = compile(code1,‘‘,exec)
exec (compile1)


#简单求值表达式用eval
code2 = 1 + 2 + 3 + 4
compile2 = compile(code2,‘‘,eval)
eval(compile2)


#交互语句用single
code3 = name = input("please input your name:")
compile3 = compile(code3,‘‘,single)

 

  

5、输入和输出函数:input()、print()

  print()函数:在py2中是个关键字,语法为:print(*objects, sep=‘ ‘, end=‘\n‘, file=sys.stdout)。objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。

sep -- 用来间隔多个对象,默认值是一个空格。end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。

file -- 要写入的文件对象,默认是输出到屏幕,如果设置为文件句柄,输出到文件,如下实例:

f = open(tmp_file,w)
print(123,456,sep=,,file = f,flush=True)
万能进度条
import
time import sys for i in range(0,101,2): time.sleep(0.1) char_num = i//2 per_str = \r%s%% : %s\n % (i, * * char_num) if i == 100 else \r%s%% : %s % (i, * * char_num) print(per_str,end=‘‘,file = sys.stdout,flush=True) import time for i in range(0,101,2): #[0,2,4,6,8...100] time.sleep(0.2) char_num = i//2 #打印多少个‘|‘ 8/2 = 4 if i == 100: per_str = \r%s%% : %s\n % (i, | * char_num) else: per_str = \r%s%% : %s%(i,|*char_num) print(per_str,end=‘‘, flush=True) print(你好) print(再见)

 

 

 

 

 

 

 

 

 

 

 

6、内置函数filter()和map()

  filter()函数:用于过滤序列,将不符合条件的序列过滤,返回符合条件的迭代器。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

def func(n):
    if n%2 == 0:
        return True
lst = [1,2,3,4,5,6,7]
ret = filter(func,lst)
print(list(ret))                              #输出结果为:[2,4,6]

  map()函数: 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表的迭代器。

lst=[1,2,3,4]
def func(n):
    return n**2
ret=map(func,lst)
print(list(ret)                              #输出结果为:[1,4,9,16]

 

以上是关于内置函数及匿名函数的主要内容,如果未能解决你的问题,请参考以下文章

内置函数及匿名函数 补充

python内置函数及匿名函数

python的内置函数(续)及匿名函数

内置函数及匿名函数

内置函数随笔及匿名函数

6-1:递归内置函数匿名函数