注:查看详细猛击这里

一,数字计算

#绝对值
i=abs(-123) print(i) #执行结果:123

#divmod() 两个数相除,得到商和余数。
r=divmod(10,3) #这个用于分页。
print(r) #执行结果:(3, 1)

#eval() #处理字符串类的表达式
ret = eval("1+3")
print(ret) 执行结果:4
ret = eval("a+9", {"a": 9})
print(ret) 执行结果:18

#pow() #求一个数的幂
print(pow(2,10)) #执行结果:1024

#round() #四舍五入
print(round(3.3))
#执行结果:3

二,all和any

#all(),循环参数,如果每个元素都为真,,那么all的返回值为真
r=all([True,True,False])
print(r)#执行结果:False
print(all([123," ",()]))#执行结果:False
#假的有:0,None,"",[],(,),{}  ==> 0,None,空值

#any() 是和all相反的,只要有一个为真,则为真
print(any([None," "])) #执行结果:True

三、进制间的转换

#bin()#二进制
#oct()#八进制
#int()#十进制
#hex()#十六进制
print(bin(12))#将10进制的数12转成二进制
print(oct(12))#将10进制数8转成8进制
print(hex(12))#将10进制的数12转成16进制
#那么进制间的相互转换怎么转呢。如将8进制转为16进制
x=int("0o14",base=8) #先将8进制转为10进制,然后用10进制去转为16进制。
print(hex(x))

四,字节格式的转换

#bytes()  #字节
#bytearray() #字节列表
########方式一########
s=bytes("李鹏",encoding="utf-8")) #将字符串转换成对应的字节
print(s)

########方式二########
x="李鹏".encode("utf-8")) #将字符串转换成对应的字节 #这个是用字符串的encode()方法

print(x)
x.decode()#字节转为字符串

五,ascii 的转换

#chr()  #将ascii码数转为具体的变量
#ord() #将变量转为ascii码
print(chr(66)) #执行结果:B
print(ord("A")) #执行结果:65

六,查看类的方法

#dir()#查看一个类提供的功能
print(dir(int))
help(int)#help比dir()更加明细

七,isinstance

 

#isinstance()判断某个对象是否属于某个类
args=[11,22]
print(isinstance(args,(list,)),isinstance(args,(tuple,))) #执行结果:True, False



class A:
    pass
class B(A):
    pass
print(isinstance(B(),A))  #执行结果是True
print(type(B())==A) #执行结果是Flase

 

说明:type判断类型比较窄,不能判断继承关系的类。isinstance则可以判断所有的

 

八、lambda

注:lambda只是优化了代码量,并没有提高性能,同时反而增加了代码的易读性的难度,故不建议使用

九,filter 和map

map :遍历序列,对序列中每个元素进行操作,最终获取新的序列。

#map() #循环可迭代的对象,让每一个对象成为函数的参数,并执行函数
def f1(x):
    return x+10 #让所有的参数都进行一种操作
ret=map(f1,[1,23,4,5])
for i in ret:
    print(i) #执行结果:11,22,14,15

filter:对于序列中的元素进行筛选,最终获取符合条件的序列

#filter() #循环可以迭代的对象,让每一个对象成为函数的参数,并执行函数。
def f(x):
    if x>22:
        return True  #filter()只能用来作为筛选工具。根据返回结果的真假来决定该参数的取舍
    else:
        return False
ret=filter(f,[11,22,33,44]) #让列表中的对象分别取执行f函数
for i in ret:
    print(i) #执行结果:33,44

十,hash值

#hash()#将一个字符串转为hash值。hash值是更有利于索引。常用于字典key中
print(hash("ffeffsfef")) #执行结果:-1868546631

十一,id

#id() 获取内存地址
i=2
print(id(i)) #执行结果:1665829344

十二,列表

#reversed() #将列表/元组/字符串进行反转
li=(1,2,3,4)
for i in reversed(li):
    print(i)

#enumerate() #给列表增加一个序列
li=["a","b","c"]
dic={}
for key,value in enumerate(li,start=1):
dic[key]=value
print(dic) #执行结果:{1: 'a', 2: 'b', 3: 'c'}


#sorted() #给列表排序
li=[33,2,55,6]
li.sort()#对li列表进行排序,那么li列表本身序列就会发生改变
print(li)
li1=[33,2,55,6]
ret=sorted(li1)#对li列表进行排序,对排序结果生成新的列表,不改变原来列表
print(ret,li1)
char=["1","23","20","A","a","alex","_","赵","李","王"]
new_char=sorted(char)
print(new_char)
for i in new_char:
print(bytes(i,encoding="utf-8"))
"""

>>>执行结果:
[2, 6, 33, 55]
[2, 6, 33, 55] [33, 2, 55, 6]
['1', '20', '23', 'A', '_', 'a', 'alex', '李', '王', '赵']
b'1'
b'20'
b'23'
b'A'
b'_'
b'a'
b'alex'
b'\xe6\x9d\x8e'
b'\xe7\x8e\x8b'
b'\xe8\xb5\xb5'
"""

十三,zip

#zip() #将两个列表结合成一个新的列表
li1=[1,2,3,4]
li2=["a","b","c","d"]
r=zip(li1,li2)
for i in r:
    print(i)  
""" 执行结果: (1, 'a') (2, 'b') (3, 'c') (4, 'd') """

补充:

#生成随机验证码
import random
tmp=""
for i in range(4):
    x=random.randrange(0,4) #随机确定当i循环到第几次时才会出现x==3
    if x==3:
        tmp+=str(random.randrange(0,10))  #当x==3时,当前这一位为数字
    else:
        rad=random.randrange(65,91)
        tmp+=chr(rad)
print(tmp)

十四、vars

本函数是实现返回对象object的属性和属性值的字典对象。如果默认不输入参数,就打印当前调用位置的属性和属性值,相当于locals()的功能。如果有参数输入,就只打印这个参数相应的属性和属性值。

 print(vars())
"""
执行结果:
 {'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000655C88>, '__package__': None, '__author__': 'liujianzuo', '__spec__': None, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__file__': 'E:/py_test/s12_mokuai/s1.py', '__name__': '__main__'}
"""

其中最重要的几个参数:__doc__ __name__ __main__ __file__ __package__

print(__doc__) # python文件的注释 三引号 注释必须在开头,
print(__file__) #自身脚本文件加路径
print(__package__) # 当前文件为None
from s12_mokuai import s1 print(s1.__package__) # 导入模块文件的文件: 则输出导入模块文件的所在目录 from s12_mokuai import s1print(s1.__cached__) #导入的文件,则输出其缓存目录

重点1  __name__的重要性不言而喻

如下:

#有两个文件,s2.py和day1.py

##########s2.py
print(__name__)
print(__file__)

##############day1.py
import s2
print(__name__)

"""
首先,执行s2.py得到结果:
__main__
D:/脚本/s2.py

其次执行day1.py得到的结果:
s2
D:\脚本\s2.py
__main__

由上面的执行结果可以知道,s2模块的print(__name__)在两次执行的结果是不一样的。这就是__name__的重要之处:

__name__是用来定义函数执行的主入口的。比如:刚才执行s2.py,那么s2.py就是函数主入口;后来执行day1.py,虽然导入了s2.py,但是函数执行的主入口是day1.py。同时可以发现,只有在执行函数主入口时,__name__返回的是“__mian__“。如果是非函数主入口,返回的是模块名。这就体现出了他的重要性,如下:

#将s2.py文件进行更改

##########s2.py
print(__file__)
if __name__=="__main__":
    print(__name__)

##############day1.py
import s2
print(__name__)

"""
首先,执行s2.py得到结果:
D:/脚本/s2.py
__main__

其次执行day1.py得到的结果:
D:\脚本\s2.py
__main__

由此可以得出: if __name__=="__main__": 可以用作来判断一个模块若果作为主函数时,才执行的某些代码。否则不执行

重点2 __file__  #自身脚本文件加路径

__file__的作用就在于可以获取当前文件所在的路径。

#第一种情况
import
os,sys # print(os.getcwd()) print(os.path.dirname(__file__)) #输出当前文件所在的上级目录路径 p1 = os.path.dirname(__file__) p2 = "bin" new_dir = os.path.join(p1,p2) #将一个目录路径拼接在一起。 sys.path.append(new_dir) """ 执行结果: D:\脚本 D:\脚本\bin """

注意区别:

#第二种情况
sys.path.append("D:\脚本\bin")

上面虽然都是为增加模块导入路径;

第二种情况,导入路径是死值,如果整个代码移动到别的服务器上,那么文件路径必然会发生改变,那么就会导致模块导入失败。

第一种情况,要灵活很多,即使整改代码移动到别的服务器上,也不会因为路径名不正确运行不成功。

 

 


posted on 2017-05-17 16:57  进_进  阅读(189)  评论(0)    收藏  举报