内置函数、匿名函数

内置函数

一、作用域相关

locals():返回本地作用域中的所有名字

globals():返回全局作用域中的所有名字

还有两个跟这个很像的词知道吗?

global 变量:在局部声明一个全局变量

nonlocal  变量:只能用于局部变量,找上层中离当前函数最近的一层的局部变量

二、迭代器相关

range():可迭代,不是迭代器,加iter变为迭代器

print('__next__' in dir(range(1,11,2)))   #False
print('__iter__' in dir(range(1,11,2)))   #True
View Code

迭代器.__next__()           next(迭代器)     基本用法一样

迭代器=可迭代的.__iter__()

迭代器=iter(可迭代的)

三、其他(加粗为熟记,否则了解) 

1、字符串类型代码的执行(3)

1)、eval() 将字符串类型的代码执行并返回结果

print(eval("1+2+3+4"))

 2)、exec()将字符串类型的代码执行

print(exec("1+2+3+4"))
exec("print("hello world")")

注:exal()和exec()都可以执行字符串类型的代码,但eval()用于有结果的简单计算,有返回值;而exec()用于简单流程控制,没有返回值。 

 3)、compile:执行时显示交互命令,提示输入。

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

 2、输出输入相关(2):

1)、input()输入  

name=input("请输入姓名:")
pwd=input("请输入密码:")
input输入

2)、print()输出

import time
for i in range(0,101,2):  
     time.sleep(0.1)
     char_num = i//2      #打印多少个'*'
     per_str = '
%s%% : %s
' % (i, '*' * char_num) if i == 100 else '
%s%% : %s'%(i,'*'*char_num)
     print(per_str,end='', flush=True)
#小越越  : 
 可以把光标移动到行首但不换行
打印进度条

3、数据类型相关:

type():返回变量的数据类型

 4、内存相关(2)  

 id():返回变量的内存地址

 hash():返回一个可hash变量的哈希值,不可哈希的变量 被hash之后会报错。                                      

t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #会报错

'''
结果:
TypeError: unhashable type: 'list'
'''
hash举例子

5、文件操作相关(1)

 open():打开一个文件,返回一个文件操作符(文件句柄)

注:操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)可以用encoding指定编码

6、模块操作相关(1)                                                                                                  

 __import__导入一个模块  

7、帮助 (1)

help() :在控制台输入help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出。

或者直接执行help(o),o是参数,查看和变量o有关的操作。

8、和调用相关(1)

 callable(o)

o是参数,查看这个变量是不是可调用。

如果o是函数,就会返回True. 

 9、查看内置属性(1)

dir():默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法分变量。

四、和数字相关

1、数据类型相关                                                                                               

 bool:布尔值

 int:整型  

 float:浮点型

 complex:复数  

2、进制装换相关

bin:二进制

oct:八进制

hex:十六进制                                                                                                                                                

3、数学运算相关

 abs: 绝对值

divmod:除余

round:小数精确位

pow:幂运算

sum:求和

min:计算最小值

max:计算最大值

五、数据结果相关

1、序列------列表和元组相关的:list和tuple                                    

2、序列------字符串相关的:str, format,bytes,bytearry,memoryview,ord,chr,ascii,repr  

ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))
bytearray
ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))
print(bytes(ret[:3]).decode('utf-8'))
print(bytes(ret[3:]).decode('utf-8'))
memoryview

3、序列:reversed,slice

l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))
reversed
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
slice

4、数据集合------字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,all,any,zip,filter,map

filter

filter()函数:循环可迭代元素调用函数,如果返回True放到filter()函数里。filter只管筛选,不会改变原来的值。

例1:从列表中删除偶数,保留奇数。

def is_odd(x):
    return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
#结果:[1, 7, 9, 17]
filter删偶留奇
def is_not_empty(s):
    return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])
#结果:['test', 'str', 'END']
filter

注意:s.strip(rm)删除s字符串中开头、结尾处的rm序列的字符。当rm为空时,默认删除空字符串。

例3、利用filte()过滤出1~100中平方公里是整数的数。

import math
def is_sqr(x):
    return math.sqrt(x) % 1 == 0
print filter(is_sqr, range(1, 101))
#结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
平方根整数

map

执行前后元素个数不变,值可能发生改变。

map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

ret = map(abs,[1,-4,6,-8])    #abs:绝对值
print(ret)
for i in ret:
    print(i)    #1,4,6,8
map

sorted

内存空间有两个列表,生成一个新列表,一个保留原来顺序。

优点:不改变原列表

缺点:占内存

例1、列表按照其中每一个值的绝对值排序

l1 = [1,3,5,-2,-4,-6]
l2 = sorted(l1,key=abs)
print(l1)
print(l2)
绝对值排序

例2、列表按照每一个元素的len排序

l = [[1,2],[3,4,5,6],(7,),'123']
print(sorted(l,key=len))
len排序

匿名函数

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。

#这段代码
def calc(n):
    return n**n
print(calc(10))
 
#换成匿名函数
calc = lambda n:n**n
print(calc(10))
函数对比

注意:1)、参数可以有多个,用逗号隔开;

            2)、匿名函数不管多复杂,只能写一行,且逻辑执行结束后的内容就是返回值;

            3)、返回值可以和正常的函数一样,可以是任意数据类型

例1、按条件输出

res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)      #结果:11    15
按条件输出

例2、按平方输出

res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)     #结果:1  25  49  16  64
平方输出

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

#方法一
test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
print(test(t1,t2))
#方法二
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
#方法三
print([{i:j} for i,j in zip(t1,t2)])
面试题
原文地址:https://www.cnblogs.com/gaoya666/p/8195760.html