内置函数随笔及匿名函数

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())
    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__()

#例1:
k=iter([1,2,3,4])
print(k.__next__())                             #输出结果为:1
print(next(k))                                  #输出结果为:2
#例2:
k=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():执行字符串代码,无返回值

4、内置函数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]

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 )

6、zip()函数:

  语法为:zip(iterable,iterable...),将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表迭代器。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

l1 = (12,3,4,5,6,7)
l2 = (‘a‘,‘b‘,‘c‘,‘d‘)
l3 = [9,8,7]
ret = zip(l1,l2,l3)
print(list(ret))                                  #输出结果为:[(12, ‘a‘, 9), (3, ‘b‘, 8), (4, ‘c‘, 7)]

7、sorted()函数:

  sort()与sorted()的区别:sort是应用在list上方法,对list进行排序,并将改变原有的列表;而sorted()是对可迭代对象进行排序,不改变原有的可迭代对象,语法如下:

sorted(iterable,key=...,reverse=...),key接收一个函数,按照函数进行排序,reverse为排序规则,reverse = True 降序 , reverse = False 升序(默认)。

#实例1:
l = [1,34,3,-5864,5,-1236,7]
print(sorted(l,reverse=True))                    #输出结果为:[34, 7, 5, 3, 1, -1236, -5864]
print(sorted(l,key=abs))                         #输出结果为:[1, 3, 5, 7, 34, -1236, -5864]
#实例2:
l = [[1,2],[3,4,5,6],(7,),‘123‘]
print(sorted(l,key=len))                         #输出结果为:[(7,), [1, 2], ‘123‘, [3, 4, 5, 6]]

二、匿名函数  

  目前在python语言中常见的一句话代码有:三元运算、各种表达式(如,列表表达式和生成器表达式)及匿名函数,也称为lambda表达式。

#普通函数
def calc(n):
    return n**n
print(calc(10))

#匿名函数
calc = lambda n:n**n
print(calc(10))

  从上实例可以看出匿名函数的调用方式和普通函数一样,通过传参实现函数的调用,其格式可以总结为:函数名=lambda 参数1,参数2...:返回值;另一方面匿名函数可以实现真正的匿名。主要的表现在和其他功能函数合作的时候,如下例:

#实例1:
dic={‘k1‘:10,‘k2‘:100,‘k3‘:30}
print(max(dic))                                           #找出字典中最大的key值
print(max(dic,key=lambda k:dic[k]))                       #找出字典中valu最大对应的key值

#实例2:
ret=map(lambda n:n**2,[1,2,3,4])
print(list(ret))                                          #输出结果为:[1, 4, 9, 16]

#实例3:
ret=filter(lambda n:n>10,[1,12,5,11,15])
print(list(ret))                                          #输出结果为:[12, 11, 15]

面试真题:

(1)现有两个元组((‘a‘),(‘b‘)),((‘c‘),(‘d‘)),请使用python中匿名函数生成列表[{‘a‘:‘c‘},{‘b‘:‘d‘}]

#匿名函数形式:
l1=((‘a‘),(‘b‘))
l2=((‘c‘),(‘d‘))
ret=map(lambda n:{n[0]:n[1]},zip(l1,l2))
print(list(ret))
#列表表达式形式:
l1=((‘a‘),(‘b‘))
l2=((‘c‘),(‘d‘))
print([{n[0]:n[1]} for n in zip(l1,l2)])

(2)下面程序输出的结果是:24

d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print x

(3)以下代码的输出是什么?请给出答案并解释。

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])#解释:  函数返回值为一个列表表达式,经过4次循环结果为包含四个lambda函数的列表,由于函数未被调用,循环中的i值未被写入函数,经过多次替代,循环结束后i值为3,故结果为:6,6,6,6

  请修改multipliers的定义来产生期望的结果(0,2,4,6)。

def multipliers():
    return (lambda x:i*x for i in range(4))         #返回一个生成器表达式
print([m(2) for m in multipliers()])

原文地址:https://www.cnblogs.com/Ebola-/p/8241003.html

时间: 2024-10-26 07:40:16

内置函数随笔及匿名函数的相关文章

内置函数filter()和匿名函数lambda解析

一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器(python3以下版本返回是列表). 语法:filter(function or None, iterable) --> filter object 实例: #获取数字100以内的奇数 def even_num(n): return n % 2 ==1 res = filter(even_num,

内置函数补充、匿名函数及闭包

内置函数.匿名函数及闭包 匿名函数 def func(x,y): return (x,y) print(func(1,2)) # 结果: (1,2) f = lambda x,y:(x,y) # lambda关键字 print(f(1,2)) # 结果: (1,2) print((lambda x,y:(x,y))(1,2)) # 结果: (1,2) # 一行代码实现匿名函数的定义及调用 print(lambda :1) print((lambda :1)()) # 匿名函数可以不写参数,但必须

函数作用域,匿名函数,map,filter,reduce---Python重新开始第五天

函数作用域 函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 1 name='alex' 2 3 def foo(): 4 name='lhf' 5 def bar(): 6 name='wupeiqi' 7 print(name) 8 def tt(): 9 print(name) 10 return tt 11 return bar 12 13 # bar=foo() 14 # tt=bar() 15 # print(tt) 16 # tt() 17 r1 = foo(

JavaScript 函数声明,函数表达式,匿名函数的区别,深入理解立即执行函数(function(){…})()

function fnName(){xxxx}; // 函数声明:使用function关键字声明一个函数,在指定一个函数名. //例如:(正常,因为 提升 了函数声明,函数调用可以在函数声明之前) fnName(); function fnName(){ alert('Hello World'); } var fnName = function(){xxxx}; //函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量. //例如1:(报错,变量fn

函数声明、函数表达式、匿名函数

函数声明.函数表达式.匿名函数 ()先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明 函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式. 匿名函数:function ()

函数细说及匿名函数

我们知道,函数是对象.每个函数 都是Function类型的实例,和其他引用类型一样具有方法和属性.由于函数是对象,因此函数名实际上是一个指向函数对象的指针. 函数有三种定义方式:函数声明,函数表达式,使用Function构造函数. 函数声明: 函数表达式: 在函数表达式中,使用变量sum即可引用函数,注意函数结尾有一个分号,就像声明其他变量一样. 构造函数(不推荐使用): 由于函数名仅仅是指向函数的指针,所以一个函数可以有很多的名字.注意使用不带圆括号的函数名是访问函数指针,而非调用函数. 在这

声明函数 执行上下文 匿名函数

方法一: var foo = function () { //code } 方法二: function foo () { //code } 方法一:foo在进入函数执行上下文开始执行代码的时候,foo是undefined的,执行完var foo = function () { }这句,foo才会得到赋值: 方法二:在进入函数执行上下文开始执行代码的时候,foo已经是一个function了. 一旦进入执行上下文(在执行代码之前),VO(变量对象)就会被一些属性填充: 函数的形参(当进入函数执行上下

python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r

一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x print(f) #打印指向该函数的内存地址 print(f(5)) #内存地址(5) 调用运行该函数 def cala(x): y=x*x return y z=cala(5) print(z) >>> <function <lambda> at 0x10137d950&g

Python基础----内置函数补充、匿名函数、递归函数

内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数,b为被除数 示例: 1 >>> divmod(7, 2) 2 (3, 1) #3为商,1为余数 3 >>> divmod(7, 2.5) 4 (2.0, 2.0) 应用:web前端页数计算 1 total_count=73 2 per_count=23 3 res=div