函数分成了6大类
调用相关
callable(o),o是参数,看这个变量是不是可调用。
如果o是一个函数名,就会返回True
def fucn(): a = 1 print(a) print(locals()) print(globals()) # fucn() print(callable(fucn))
def func():pass print(callable(func)) #参数是函数名,可调用,返回True print(callable(123)) #参数是数字,不可调用,返回False
帮助相关
help: 可以帮助查看一些内置函数的方法特性,可以help(list),包含方法名及使用方法
在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出
或者直接执行help(o),o是参数,查看和变量o有关的操作。。。
查看内置属性
dir: 查看该数据类型的内置方法,比help(list)更直观的看到内置方法
dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量
print(dir(list)) #查看列表的内置方法 print(dir(int)) #查看整数的内置方法
模块
import:导入模块
import time
__import__
os = __import__('os') print(os.path.abspath('.'))
文件打开
open:打开模式,r/w/a , rb/wb/ab/. 如果同时使用读写,造成光标混乱
open() 打开一个文件,返回一个文件操作符(文件句柄)
操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)
可以用encoding指定编码.
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) #mode:默认读,buffering:是否要缓存,encoding:以什么方式解码
内存相关的
:(id,hash)
hash功能:数据的查找和存储
字典的key,使用hash,形成唯一的值,再次查找时,通过索引进行查找value,这就是字典的键唯一性的问题,
哈希判断一个数据类型是否可哈希,一次执行时,对同一个hash的结果总是不变。多次执行代码时,内存地址可能会改变
id:查找地址
输入输出
input:
print:(1)*args,动态参数,(2)sep: 指定分割符,多个打印内容之间的分隔符,(3)file:写入文件,file
所有的print都当作往一个文件里写内容
line = open('name.txt','w',encoding="utf-8") def mai(): import time for i in range(65,91): s = " {name:s}".format(name=str(i)) time.sleep(0.5) print(s,file=line) mai()
print(" %s"%1)" ",每一次把光标移动至头部,flush = True :强制每次打印的内容立即打印,不要缓存
字符串类型:
exec:可以处理字符串式的python代码,无返回值
eval:和exec功能相同,但是有返回值.eval与exec模块,能够接受并运行python程序代码的字符串,。这种结构是python能够实现产品定制的原因,:因为python可以动态的修改,用户可以改进系统内部的代码,
而不需要拥有或编译整个系统的代码。
compile 将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
compile :一次编译,可以多次执行调用
>>> #交互语句用single >>> code3 = 'name = input("please input your name:")' >>> compile3 = compile(code3,'','single') >>> name #执行前name变量不存在 Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> name NameError: name 'name' is not defined >>> exec(compile3) #执行时显示交互命令,提示输入 please input your name:'pythoner' >>> name #执行后name变量有值 "'pythoner'"
和数字相关
divmod
divmod(6,2),取商,取余,商余函数, 用在网页分页
print(divmod(10,3))#divmod(x,y):求x除y 的值,并以元组的方式返回商和余数。 #(3,1)
abs:绝对值
round:round(3,145,2)保留两位小数
>>> round(10.5)# 使用round 奇进偶弃, 如果距离两边一样远,会保留到偶数的一边。 比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。 10 >>> round(11.5) 12 #python不支持复数转换为浮点数或者整数 >>> int(4.5+0.j) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't convert complex to int >>> float(4+0j) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't convert complex to float
pow()
pow(2,3) 幂次运算:第一个数字与第二个数字的幂次运算。pow(2,3,4) 第三个数取余,是2的3次幂 除以4,取余。pow运算后返回的值为int类型。
sum
接收一个可迭代对象,和默认参数,默认参数,计算前面的总和之后然后 和后面的默认参数相加
sum(iterable[,start])#返回迭代对象全部相加的和,如果填写start ,计算全部和之后再加start print(sum(L,1))
min
print(min([1,2],default=0)) #default 的作用是用来预防传入的可迭代对象为空时,返回一个 默认值 min({1,2,3,4,5},key=lambda n:abs(n))# key 是设置一个匿名函数
max:
t= (-5,1,2,4)
print(max(t,key=abs))
print(max([1,2],default=0))
总结 :
数字——数据类型相关:bool,int,float,complex
数字——进制转换相关:bin,oct,hex
数字——数学运算:abs,divmod,min,max,sum,round,pow
作用域相关
globals :获取全局的变量的字典
locals: 获取执行本方法所在命名空间内的局部变量的字典
reversed():参数是一个序列,返回一个迭代器,不修改原列表 ret = reversed(l)
reverse():参数是一个序列,返回一个None,调用使用l.reverse()
slice():实现切片的函数
fromat:
bytes:功能:用于传输,意义:转换成字节码,修改的时候,会重新创建一个新的内存地址,
bytearry:对比较长的字符串,修改次数多。指定某处修改,不会改变bytearry 的内存地址。只对字符有作用,
memoryview# v = memoryview(bytes("啊水电费",encoding="utf-8"))
old:字符转编码
chr:数字转字符
ASCII:
repr:功能,显示数据类型 print(“name %r”.fromat("金老板"))
enumrate():枚举,返回一个元组
all:接受可迭代对象,有一个假则为假
any:有一个为真则为真
print(zip([1,3,4],[12,4,5])):返回迭代器
zip():接收可迭代的,以短的元素为基准,返回元组:拉链用法
filetr(): 使用该函数,得到的返回值为迭代器,须用list强转
def fun(x): if x % 2 is 0: return True a =filter(fun,[1, 4, 6, 7, 9, 12, 17]) #此时的a 为 <filter object at 0x02461730> print(list(a))
and: return x and x.strip(): and 前面一个值为假,就不会执行下一个
map():新内容等于原内容
filter 与map: 都是函数名+可迭代对象
且返回值都是可迭代对象
filter:筛选,筛选后的还是原来列表中的
map:对可迭代对象中的每一项做操作,结果不一定是原来列表中的元素
sort:
sorted
数字有关
print(int()) #如果不填写内容,返回0 print(int(3.6)) # 取整 print(int('12',16))#以十六进制进行转换 a = int("0xa",16) print(a,type(a))#返回类型为int #总结:int(x,base=10),x可以为字符串,默认为10进制转换
float:返回浮点数,可以将字符串类型进行转换
print(float(1)) print(float("123")) #print(float(1)) #print(float("123"))
bool: bool 继承自int类
#如果传入的为空元祖或者,空字典、空集合都是false,且0 也是false print(bool(123<1)) print(bool(0)) print(bool({})) print(bool(' '))
print(issubclass(bool,int))#判断是否为继承关系,如果是返回True
complex:
print(complex("1+2j"))#注意:1+2j 中间不能有空格 print(complex("1")) print(complex(1,2))#返回的元组
和数字相关的数字运算:
abs:求一个数字的绝对值
数据结构相关
—序列——列表与元组:list 意义可以生成列表,强制转换生成器的结果。使用list函数返回一个list类型的列表,参数是可迭代。
tuple():作用可以使可迭代对象转化为元组,如果参数为字典返回由字典的键组成的元组。如果是列表则返回的是元组,如果列表中还嵌套有列表,是不会改变内层的类型
a =list((134,23)) print(a,type(a)) a =list((134,23)) a =tuple({1:2,3:4}) a =tuple([1,2,3,[1,2,3],4])
序列——列表和元组相关的:list和tuple
序列——字符串相关的: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'))
序列: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])
1. 函数功能将一个数值进行格式化显示。 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化。 >>> format(3.1415936) '3.1415936' >>> str(3.1415926) '3.1415926' 3. 对于不同的类型,参数format_spec可提供的值都不一样 #字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐 print(format('test', '<20')) print(format('test', '>20')) print(format('test', '^20')) #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None >>> format(3,'b') #转换成二进制 '11' >>> format(97,'c') #转换unicode成字符 'a' >>> format(11,'d') #转换成10进制 '11' >>> format(11,'o') #转换成8进制 '13' >>> format(11,'x') #转换成16进制 小写字母表示 'b' >>> format(11,'X') #转换成16进制 大写字母表示 'B' >>> format(11,'n') #和d一样 '11' >>> format(11) #默认和d一样 '11' #浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None >>> format(314159267,'e') #科学计数法,默认保留6位小数 '3.141593e+08' >>> format(314159267,'0.2e') #科学计数法,指定保留2位小数 '3.14e+08' >>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示 '3.14E+08' >>> format(314159267,'f') #小数点计数法,默认保留6位小数 '314159267.000000' >>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数 '3.141593' >>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数 '3.14159267' >>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数 '3.1415926700' >>> format(3.14e+1000000,'F') #小数点计数法,无穷大转换成大小字母 'INF' #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数 >>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点 '3e-05' >>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点 '3.1e-05' >>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点 '3.14e-05' >>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写 '3.14E-05' >>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点 '3' >>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点 '3.1' >>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点 '3.14' >>> format(0.00003141566,'.1n') #和g相同 '3e-05' >>> format(0.00003141566,'.3n') #和g相同 '3.14e-05' >>> format(0.00003141566) #和g相同 '3.141566e-05'
数据集合——字典和集合:dict,set,frozenset
数据集合:len,sorted,enumerate,all,any,zip,filter,map
filter和map:http://www.cnblogs.com/Eva-J/articles/7266192.html
sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html
其他
字符串类型代码的执行
输入输出相关
input() 输入
s = input("请输入内容 : ") #输入的内容赋值给s变量 print(s) #输入什么打印什么。数据类型是str
print() 输出
def print(self, *args, sep=' ', end=' ', file=None): # known special case of print """ print(value, ..., sep=' ', end=' ', file=sys.stdout, flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符 flush: 立即把内容输出到流文件,不作缓存 """
file关键字的说明
f = open('tmp_file','w') print(123,456,sep=',',file = f,flush=True)
打印进度条
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) #小越越 : 可以把光标移动到行首但不换行
数据类型相关
type(o) 返回变量o的数据类型
内存相关
id(o) o是参数,返回一个变量的内存地址
hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
t = (1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #会报错 ''' 结果: TypeError: unhashable type: 'list' '''
hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。
*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。
t = (1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #会报错 ''' 结果: TypeError: unhashable type: 'list' '''
匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数
#这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10))
上面是我们对calc这个匿名函数的分析,下面给出了一个关于匿名函数格式的说明
函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任意数据类型
上面是匿名函数的函数用法。除此之外,匿名函数也不是浪得虚名,它真的可以匿名。在和其他功能函数合作的时候
l=[3,2,100,999,213,1111,31121,333] print(max(l)) dic={'k1':10,'k2':100,'k3':30} print(max(dic)) print(dic[max(dic,key=lambda k:dic[k])])
res = map(lambda x:x**2,[1,5,7,4,8]) for i in res: print(i) 输出 1 25 49 16 64
res = filter(lambda x:x>10,[5,8,11,9,15]) for i in res: print(i) 输出 11 15
现有两个元组(('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)])
1.下面程序的输出结果是: d = lambda p:p*2 t = lambda p:p*3 x = 2 x = d(x) x = t(x) x = d(x) print x 2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] 3.以下代码的输出是什么?请给出答案并解释。 def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) 请修改multipliers的定义来产生期望的结果。
请务必重点掌握:
其他:input,print,type,hash,open,import,dir
str类型代码执行:eval,exec
数字:bool,int,float,abs,divmod,min,max,sum,round,pow
序列——列表和元组相关的:list和tuple
序列——字符串相关的:str,bytes,repr
序列:reversed,slice
数据集合——字典和集合:dict,set,frozenset
数据集合:len,sorted,enumerate,zip,filter,map
参考文档:
http://www.cnblogs.com/Eva-J/articles/7206498.html