内置函数
一、作用域相关
locals():返回本地作用域中的所有名字
globals():返回全局作用域中的所有名字
还有两个跟这个很像的词知道吗?
global 变量:在局部声明一个全局变量
nonlocal 变量:只能用于局部变量,找上层中离当前函数最近的一层的局部变量
二、迭代器相关
range():可迭代,不是迭代器,加iter变为迭代器
print('__next__' in dir(range(1,11,2))) #False print('__iter__' in dir(range(1,11,2))) #True
迭代器.__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("请输入密码:")
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' '''
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))
ret = memoryview(bytes('你好',encoding='utf-8')) print(len(ret)) print(bytes(ret[:3]).decode('utf-8')) print(bytes(ret[3:]).decode('utf-8'))
3、序列:reversed,slice
l = (1,2,23,213,5612,342,43) print(l) print(list(reversed(l)))
l = (1,2,23,213,5612,342,43) sli = slice(1,5,2) print(l[sli])
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]
def is_not_empty(s): return s and len(s.strip()) > 0 filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']) #结果:['test', 'str', 'END']
注意: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
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))
匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。
#这段代码 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)])