11、数学计算: 2n的m次方:n**m 3n除以m的整数值:n // m 4n除以m的浮点值:n / m 5Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 6复数的实部a和虚部b都是浮点型 7tuple的元素不可改变,但它可以包含可变的对象,可变对象中的元素可以改变。 8string、list和tuple都属于sequence(序列) 9 10集合(set)的运算:- | & ^ 112 进制是 0b 128 进制是 0o 1316 进制是 0x 14 15创建一个空集合用 set() 16创建一个空字典用 { }。 17 18 192、转义字符输出,添加 r 使用原始字符 20反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。 21print('C:\name\111') 22#输出 C: 23 ame\111 24print(r'C:\name\111') 25#输出 C:\name\111 26 273、多行输出,去除第一行换行加 \ 28print(''' 29nihao 30zaima 31''') 32#输出 33[space] 34nihao 35zaima 36print('''\ 37nihao 38zaima 39''') 40#输出 41nihao 42zaima 43 443、使用 + 进行字符串的连接,使用 * 进行字符串的重复 45Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。 463*'aaa'+'bbb' 47#输出 48aaaaaaaaabbb 49 504、最后式子的值作为下面的输入 _ 51'aaaa' 52a=_ 53print(a) 54#输出 55aaaa 563*5 573+_ 58#输出 5918 60 615、多个赋值,右侧的表达式在赋值发生之前都是计算的 62a,b=1,2 63a,b=a,a+b 64a,b 65#输出 66(2,3) 67 68 696,print()输出 70print('aaaa',end=',') 71print('bbbb') 72#输出 73aaaabbbb 74 757、在循环内修改正在迭代的序列(例如,复制所选的项目),建议首先创建原序列的拷贝。 76对序列进行迭代不会隐式地进行复制。 77切片符号使这特别方便: 78for w in words[:]: # Loop over a slice copy of the entire list. 79 if len(w) > 6: 80 words.insert(0, w) 81>>> words 82['defenestrate', 'cat', 'window', 'defenestrate'] 83 84for w in words: 85 if len(w) > 6: 86 words.insert(0, w) 87#死循环 88 898、for循环的else子句在未出现break时运行 90for x in range(7): 91 if x>5: 92 print(x) 93 break 94else: 95 print('else') 96#输出 976 98for x in range(7): 99 if x>5: 100 print(x) 101else: 102 print('else') 103#输出 1046 105else 106 1079、默认值在函数定义的时刻,在定义的作用域中计算,当默认值是一个可变对象(如列表,字典或大多数类的实例)时,这会产生不同。 108i=5 109def f(arg=i): 110 print(arg) 111i=6 112f() 113#输出 1145 115def f(a,L=[]): 116 L.append(a) 117 return L 118f(1) #输出[1] 119f(2) #输出[1,2] 120f(3) #输出[1,2,3] 121如果你不想在后续调用之间共享默认值,你可以写这样的函数 122def f(a,L=None): 123 if L is None: 124 L=[] 125 L.append(a) 126 return L 127 12810、如果存在一个**name形式的形式参数,它将接收一个字典(参见映射类型——字典),这个字典包含除形式参数之外的所有关键字参数。 129它可以与*name形式的形式参数组合,这种形式接收一个元组,这个元组包含除形式参数之外的所有位置参数。(*name必须出现在**name之前) 130def test(**kr): 131 return kr 132def test2(*z): 133 return z 134def test3(*kr,**z): 135 return kr,z 136def test4(a,b=1,e=3,*c,**d): 137 return a,b,e,c,d 138print(test(a=4,b=2,c=5)) 139print(test2(1,2,3,4)) 140print(test3('a','b','c',a=1,b=3)) 141print(test4(1,1,2,2,3,4,c=5)) 142#输出 143{'a': 4, 'b': 2, 'c': 5} 144(1, 2, 3, 4) 145(('a', 'b', 'c'), {'a': 1, 'b': 3}) 146(1, 1, 2, (2, 3, 4), {'c': 5}) 147 14811、函数:string.join() 149 join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 150def testJoin(*arg,seq='/'): 151 return seq.join(arg) 152print(testJoin('D:','com','geng')) 153print(testJoin('D:','com','geng',seq='\\')) 154#输出 155D:/com/geng 156D:\com\geng 157 15812、Lambda函数可用于需要函数对象的任何地方。它们在语法上限于单个表达式。语义上,它们只是用于正常函数定义的语法 159def func(n): 160 return lambda x,y:x+y+n 161f=func(1) 162print(f) 163print(f(1,23)) 164print(f(2,3)) 165pair=[(1,2),(3,7),(4,3)] 166pair.sort(key=lambda x:x[1]) 167print(pair) 168 169 17013、函数注解 171注解以字典形式存储在函数的__annotations__属性中,对函数其它任何部分没有任何影响。 172参数注解的定义是参数名后面跟着一个冒号,然后紧跟着一个用于计算注解的表达式。 173def functest(t:str,eg:int=1)->str: 174 print(functest.__annotations__) 175 print(t+'aaa',eg) 176functest('11111', 111) 177#输出 178{'t': <class 'str'>, 'eg': <class 'int'>, 'return': <class 'str'>} 17911111aaa 111 180 181def my_function(): 182 """Do nothing, but document it. 183 184 No, really, it doesn't do anything. 185 """ 186 pass 187print(my_function.__doc__) 188#输出 189Do nothing, but document it. 190 191 No, really, it doesn't do anything. 192 19314、string.strip(str), 194声明:string为字符串,str为要删除的字符序列 195s.strip(rm) 删除s字符串中开头、结尾处,位于rm删除序列的字符 196s.lstrip(rm) 删除s字符串中开头处,位于rm删除序列的字符 197s.rstrip(rm) 删除s字符串中结尾处,位于rm删除序列的字符 198string.strip(' ') 199'111 2222 333 444' 200string.lstrip(' ') 201'111 2222 333 444 ' 202string.rstrip(' ') 203' 111 2222 333 444' 204!!!!!!!当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ') 205 string=''' \n nihao \t''' 206 string.strip() 207 'nihao' 208 20915、zip()函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表 210 a=[[1,2,3,4],[5,6,7],[8,9,10,11,12]] 211 list(zip(*a)) 212>>>[(1, 5, 8), (2, 6, 9), (3, 7, 10)] 213 list(zip(a)) 214>>>[([1, 2, 3, 4],), ([5, 6, 7],), ([8, 9, 10, 11, 12],)] 215aa=[1,2,3] 216bb=[1,2] 217cc=[1,2,3,4] 218zip(aa,bb,cc) 219[(1, 1, 1), (2, 2, 2)] 220 22116、当循环遍历字典时,键和对应的值可以使用items()方法同时提取出来。 222k={'111':1,'222':2,'33333':3} 223for k,v in k.items(): 224 print(k,':',v) 225111 : 1 226222 : 2 22733333 : 3 228 22917、两个或更多的序列,使用zip()函数可以成对读取元素。 230q=['name','age','sex'] 231a=['geng',23,'man'] 232for x,y in zip(q,a): 233 print('{0}:{1}'.format(x,y)) 234 23518、is和is not比较两个对象是否为相同的对象;这只对列表这样的可变对象比较重要 236 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False,id() 函数用于获取对象内存地址。 237 23819、str()与repr(),str()用于显示人类所看到的,repr()用于编译所看到的 239s='\n' 240str(s) #输出 \n 241repr(s) #输出 \\n #编译时对 \ 进行了转义 242 24320、str.center()、str.ljust(int)和str.rjust(int),str占用int个字节,并且左右对齐 244如果输入的字符串太长,字符串不会被截断,会完整输出。 245a='10' 246a.center(5) #' 10 ' 247a.ljust(5) #'10 ' 248a.rjust(5) #' 10' 249如果你真的想要截断,可以加上一个切片操作,例如x.ljust(n)[:n],不过将失去对齐方式 250 25121、str.zfill(),它向数值字符串左侧填充零。它理解加号和减号,超出是也不会截断 252'-3.14'.zfill(7) 253#'-003.14' 254 25522、str.format() 256'!a'(运用ascii())、'!s'(运用str())和'!r'(运用repr())可以用来在格式化之前转换相应的值。 257':'后面紧跟一个整数可以限定该字段的最小宽度。 258print('---{1!r:10}---{2!a:10}---{0!s:10}---'.format("111\n","222\n","3333\n")) 259#输出 260---'222\n' ---'3333\n' ---111 261 --- 262可以传入一个字典,然后使用'[]'访问 263dict={"str":"string",10:10,"PI":3.1415926} 264print('str{0[str]:10s},int{0[10]:5d},{0[PI]:.3f}'.format(dict)) 265#输出 266strstring ,int 10,3.142 267 26823、其他类型的对象,在写入之前则需要转换成 字符串 (在文本模式下) 或 字节对象 (以 269二进制模式) 270value = ('the answer', 42) 271s = str(value) # convert the tuple to string 272f.write(s) 273#文件中显示 274('the answer', 42) 275 27624、f.seek(offset, from_what)更改该文件对象的位置, 277from_what可以省略,默认为0,使用文件的开头作为参考点。 278当from_what的值为0,1,2 时,分别使用文件开头、当前文件位置和文件结尾作为参考点 279位置由参考点加上offset 计算得来。 280f=open('test.txt','rb+') 281print(f.write(b'011234567asdcvfg')) 282f.seek(5) #默认0开始读取 283print(f.read(1)) 284print(f.tell()) #当前位置 285f.seek(5,1) #当前位置开始读取 286print(f.read(1)) 287f.seek(-1,2) #文件末尾开始读取 288print(f.read(1)) 289#输出 29016 291b'4' 2926 293b'd' 294b'g' 295 29625、file.tell()返回一个整数,代表文件对象在文件中的当前的位置, 297在二进制模式中该数值表示自文件开头到指针处的字节数,在文本模式中则是不准确的。 298例题看上面 299在文本文件中(没有以b模式打开的文件),只允许从文件的开始查找(有个例外是查找到文件的末尾seek(0, 2)), 300而且offset只有是从f.tell()返回的值或者是0才是合法的。任何其他偏移值会产生未定义的行为。 301 30226、使用json存储结构化数据 303json.dumps([1, 'simple', 'list']) 304>>>'[1, "simple", "list"]' 305dumps()函数的另外一个变体dump(),直接将对象序列化到一个文本文件。 306如果f是为写入而打开的一个文件对象 307json.dump(object, file) 308为了重新解码对象,如果f是为读取而打开的文本文件对象 : 309object = json.load(f) 310 31127、type与isinstance 312type()不会认为子类是一种父类类型。 313isinstance()会认为子类是一种父类类型 314 315class A: 316 pass 317 318class B(A): 319 pass 320 321isinstance(A(), A) # returns True 322type(A()) == A # returns True 323isinstance(B(), A) # returns True 324type(B()) == A # returns False 325 32627、构造函数 dict() 可以直接从键值对序列中构建字典 327dictE = dict ([("ee",11), ("aaa", "bbbb"), (123, 123), (True, True)]); 328print (dictE); 329 330dictF = {x: x*2 for x in (2, 4, 6)}; 331print (dictF); 332 333dictG = dict (name = 1, goole = "name", bool = True); 334print(dictG); 335 33628、isdigit、isnumeric、isdecimal的差别 337isdigit() 338True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字 339False: 汉字数字 340Error: 无 341 342isdecimal() 343True: Unicode数字,,全角数字(双字节)(十进制) 344False: 罗马数字,汉字数字 345Error: byte数字(单字节) 346 347isnumeric() 348True: Unicode数字,全角数字(双字节),罗马数字,汉字数字 349False: 无 350Error: byte数字(单字节) 351 35229、 splitlines() 353按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表, 354如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 355print ('ab c\n\nde fg\rkl\r\n'.splitlines()); 356print ('ab c\n\nde fg\rkl\r\n'.splitlines(True)); 357>>> 358['ab c', '', 'de fg', 'kl'] 359['ab c\n', '\n', 'de fg\r', 'kl\r\n'] 360 36130、list.copy()与 = 赋值 362使用 = 直接赋值,是引用赋值,更改一个,另一个同样会变; 363copy() 则顾名思义,复制一个副本,原值和新复制的变量互不影响; 364 36531、 366循环语句可以有 else 子句, 367它在穷尽列表(以for循环)或条件变为 false (以while循环) 368导致循环终止时被执行,但循环被break终止时不执行。 369 370sites = ['1', '2', '3', '4']; 371for site in sites: 372 if site == '3': 373 print ("找到了"); 374 break; 375 print ("循环数据 " + site); 376else: 377 print ("没有循环数据!"); 378print ("完成循环!"); 379>>> 380循环数据 1 381循环数据 2 382找到了 383完成循环 384 38532、Python的作用域一共有4种,分别是: 386 L (Local) 局部作用域 387 E (Enclosing) 闭包函数外的函数中 388 G (Global) 全局作用域 389 B (Built-in) 内建作用域 390以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。 391 392x = int(2.9) # 内建作用域 393 394g_count = 0 # 全局作用域 395def outer(): 396 o_count = 1 # 闭包函数外的函数中 397 def inner(): 398 i_count = 2 # 局部作用域 399 400 401Python中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问 402 40333、默认参数必须放在最后面,否则会报 404 40534、global 和 nonlocal关键字 406当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。 407 408global关键字用来在函数或其他局部作用域中使用全局变量。 409nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量 410 41135、def(**kwargs) 把N个关键字参数转化为字典: 412 413>>> def func(country,province,**kwargs): 414... print(country,province,kwargs) 415... 416>>> func("China","Sichuan",city = "Chengdu", section = "JingJiang") 417China Sichuan {'city': 'Chengdu', 'section': 'JingJiang'} 418>>> 419 42036、同时遍历两个或更多的序列,可以使用 zip() 组合: 421 422>>> questions = ['name', 'quest', 'favorite color'] 423>>> answers = ['lancelot', 'the holy grail', 'blue'] 424>>> for q, a in zip(questions, answers): 425... print('What is your {0}? It is {1}.'.format(q, a)) 426... #print('what is your %s? it is %s' %(q,a)) 427What is your name? It is lancelot. 428What is your quest? It is the holy grail. 429What is your favorite color? It is blue. 430 43137、在:file:sounds/effects/__init__.py中包含如下代码: 432__all__ = ["echo", "surround", "reverse"] 433这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。 434 43538、使用del语句删除一些对象引用。 436del var1[,var2[,var3[....,varN]]]] 437 43839、注意: 439Python可以同时为多个变量赋值,如a, b = 1, 2。 440一个变量可以通过赋值指向不同类型的对象。 441数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。 442在混合计算时,Python会把整型转换成为浮点数。 443 44440、集合(set)是一个无序不重复元素的序列。 445基本功能是进行成员关系测试和删除重复元素。 446可以使用大括号 { } 或者 set() 函数创建集合。 447 44841、 449字典是一种映射类型,它的元素是键值对。 450字典的关键字必须为不可变类型,且不能重复。 451创建空字典使用 { }。 452 45342、 454x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 455x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 456not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 457 45843、 459repr(x) 460将对象 x 转换为表达式字符串 461 462eval(str) 463用来计算在字符串中的有效Python表达式,并返回一个对象
Python3 学习手册每日更新
Stella981
2021-10-11
1140 0 0
点赞
收藏
评论区
加载中...