Python之路——琐碎知识
一、 __future__ 模块
Guido van Rossum (Python之父)拥有一架时光机,因为在人们通常要求增加语言新特性的时候,这个特性通常都已经实现了。当然我们一般人是不允许进入这架时光机的。
Guido将时光机的一部分以__future__这个模块的形式融入了python。通过它可以导入那些在未来会成为标准Python组成部分的新特性。
二、 逻辑运算
'''x or y x True,则返回x'''
>>> print(1 or 2) 1 >>> print(2 or 1) 2 >>> print(0 or 1) 1 >>> print(2 or 0) 2
'''x and y x True,则返回y'''
>>> print(0 and 2) 0 >>> print(2 and 0) 0 >>> print(1 and 2) 2 >>> print(2 and 1) 1
# “>","<"的优先级高于not > and > or ,True 和 False 不会转化为1或0 >>> print(2 or 1<3) 2 >>> print(1<3 or 2) True >>> print(1>3 and 2) False >>> print(1<3 and 2) 2 >>> print(True or 0) True >>> print(True and 0) 0 >>> print(False or 2) 2 >>> print(False and 2) False
三、 格式化输出
格式一:
1 name = input("请输入姓名:") 2 age = input("请输入年龄:") 3 height = input("请输入身高:") 4 msg = "my name is %s, my age is %s, my height is %s, my process is 80%%" %(name,age,height) 5 print(msg) 6 # 运行结果: 7 # 请输入姓名:liuyankui 8 # 请输入年龄:25 9 # 请输入身高:175 10 # my name is liuyankui, my age is 25, my height is 175, my process is 80%
格式二:
1 name = input("请输入姓名:") 2 age = input("请输入年龄:") 3 job = input('请输入工作:') 4 hobbie = input('请输入爱好:') 5 msg = '''------------ info of %s ----------- 6 Name : %s 7 Age : %d 8 job : %s 9 Hobbie: %s 10 ------------- end -----------------''' %(name,name,int(age),job,hobbie) 11 print(msg) 12 # 输出结果 13 # 请输入姓名:liuyankui 14 # 请输入年龄:25 15 # 请输入工作:IT 16 # 请输入爱好:PingPong 17 # ------------ info of liuyankui ----------- 18 # Name : liuyankui 19 # Age : 25 20 # job : IT 21 # Hobbie: PingPong 22 # ------------- end -----------------
格式三:
1 name = input("请输入姓名:") 2 age = input("请输入年龄:") 3 job = input('请输入工作:') 4 hobbie = input('请输入爱好:') 5 msg = '''------------ info of {0} ----------- 6 Name :{0} 7 Age : {1} 8 job : {2} 9 Hobbie: {3} 10 ------------- end -----------------''' .format(name,age,job,hobbie) 11 print(msg) 12 13 # 运行结果: 14 # 请输入姓名:liuyankui 15 # 请输入年龄:25 16 # 请输入工作:IT 17 # 请输入爱好:PingPong 18 # ------------ info of liuyankui ----------- 19 # Name :liuyankui 20 # Age : 25 21 # job : IT 22 # Hobbie: PingPong 23 # ------------- end -----------------
四、 int 和bool值互相转换
int ----> bool 非零转换成bool True 0 转换成bool 是False
1 >>> print(bool(2)) 2 True 3 >>> print(bool(1)) 4 True 5 >>> print(bool(0)) 6 False 7 >>> print(bool(-2)) 8 True 9 # bool ----> int False ----> 0; True ----> 1 10 >>> print(int(False)) 11 0 12 >>> print(int(True)) 13 1
五、 while...else...语句
count = 0 while count <= 5: count += 1 if count == 3:break print("Loop",count) else: # 当break打断while循环,else的内容就不再执行 print("循环正常执行了") print("------------------")
六、 Python字符串
1 # 字符串 2 3 # 字符串索引 4 a = 'abcdefghijklmn' 5 print(a[0]) # a 6 print(a[3]) # d 7 print(a[-1]) # n 8 print(a[-5]) # j 9 10 # 字符串切片 11 # 切片是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串, 12 # 原则就是顾头不顾腚 13 a = 'abcdefghijklmn' 14 print(a[0:3]) # abc 15 print(a[2:5]) # cde 16 print(a[0:]) # abcdefghijklmn 17 print(a[0:-1]) # abcdefghijklm 18 print(a[0:5:2]) # ace 19 print(a[5:0:-2])# fdb 20 21 # 字符串常用方法 22 name = 'liu-yan*kui LIU' 23 # 首字母大写 24 print(name.capitalize()) # Liu-yan*kui liu 25 # 大小写翻转 26 print(name.swapcase()) # LIU-YAN*KUI liu 27 #每个单词的首字母大写 28 print(name.title()) # Liu-Yan*Kui Liu 29 30 # 内同居中,总长度,空白处填充 31 ret = name.center(30,'-') 32 print(ret) 33 # 输出: 34 # -------liu-yan*kui LIU-------- 35 36 37 38 # 数字符串中元素出现的个数 39 a1 = 'liuyankuiliuyankui' 40 print(a1.count('i')) # 4 41 print(a1.count('liu')) # 2 42 print(a1.count('l',0,12))# 2 43 44 # \t前面的补全,默认将一个tab键变成8个空格,如果tab前面的字符不足8个,则补全8个, 45 # 如果tab键前面的字符长度超过8个不足16个,则补全16个,以此类推 46 a2 = 'hfdgdjjlk\tlkj\tlk' 47 ret3 = a2.expandtabs() 48 print(ret3) # hfdgdjjlk lkj lk 49 50 a4 = 'jgklajlkajioufgakljsakj' 51 # startswith: 判断是否以...开头 52 # endswith: 判断是否以...结尾 53 ret4 = a4.endswith('ajlk',2,8) # 顾头不顾腚 54 print(ret4) # True 55 ret41 = a4.startswith('la',3,9) 56 print(ret41) # True 57 58 # 寻找字符串中的元素是否存在 59 ret5 = a4.find('kl',2,10) # 返回的是找到的元素的索引,如果找不到返回-1 60 print(ret5) # 2 61 62 ret51 = a4.index('aj',4,13) # 返回找到元素的索引,找不到报错 63 print(ret51) # 4 64 65 # split 以什么分割,最终形成一个列表,此列表不含有这个分割的元素 66 ret6 = a4.split('a') 67 print(ret6) # ['jgkl', 'jlk', 'jioufg', 'kljs', 'kj'] 68 ret91 = 'title,Tilte,atre,'.rsplit('t',1) # 从右边开始分割,分割一次 69 print(ret91) # ['title,Tilte,a', 're,'] 70 71 ret92 = 'title,Tilte,atre,'.rsplit('t',3) # 从右边开始分割,分割3次 72 print(ret92) # ['ti', 'le,Til', 'e,a', 're,'] 73 74 75 # format的三种玩法,格式化输出 76 print('{} {} {}'.format('egon',18,'male')) # egon 18 male 77 print('{1} {0} {1}'.format('egon',18,'male')) # 18 egon 18 78 print('{name} {age} {sex}'.format(sex = 'male',name = 'liuyk',age = 18)) # liuyk 18 male 79 80 # strip 81 b1 = '-- ***liuyankuih***** --' 82 print(b1.strip('- *')) # liuyankuih 83 print(b1.lstrip(' *-')) # liuyankuih***** -- 84 print(b1.rstrip('* -')) # -- ***liuyankuih 85 86 # replace 87 name2 = 'alex say: i have one tesla, my name i alex' 88 print(name2.replace('alex','SB',1)) # 1 是只替换一次 89 90 name3 = 'liuyankui163' 91 print(name3.isalnum()) # 字符串由字母或数字组成 92 print(name3.isalpha()) # 字符串只由字母组成 93 print(name3.isdigit()) # 字符串只由数字组成
七、 for循环
t1 = 'sdkslflggjad' for i in t1: print(i)
八、 小数据池
1 #数字,字符串,小数据池 2 #数字的范围 -5 -- 256 3 #字符串:1,不能含有特殊字符; 4 # 2. s*20 还是同一个内存地址,超过则两个 5 # i1 = 2 6 # i2 = 2 7 # print(i1 is i2) # True 8 9 # s1 = 'a'*20 10 # s2 = 'a'*20 11 # print(s1 is s2) # True
九、is
1 # = 赋值 == 比较值是否相等 is 比较,比较的是内存地址 id(内容) 2 # li1 = [1,2,3] 3 # li2 = li1 4 # li3 = li2 5 # print(id(li1),id(li2))