1、 Python1.基本某些1.1 下载地址&学习地址官网下载即可。1.2 作为计算器使用 2 + 2 4 50 - 5 * 6 20 (50 - 5 * 6 ) / 4 5.0 8 / 5 除法总是返回浮点数1.6 17 / 3 典型分区返回一种浮点数5.667 17 / 3 分区丢弃小数某些5 17 3 运算符返回分区剩余某些2 5 * 3 + 2 成果*除数+余数17 5 * 2 5平方25 2 * 7 2 7 128 幂 width = 20 #等号(=)用于为变量赋值 height = 5 * 9 width * height 900 a=3+5j 支持虚数 tax = 12.5 /
2、100 price = 100.50 price * tax 12.5625 price + _ 在交互模式下最后打印表达式被分派给变量_(只读)113.0625 round (_ , 2 )113.061.3 字符串字符串表达可以用单引号(.)或双引号(.)括起来,成果相似。可以用来逃避引号:(与其她语言不同,特殊字符(如n单引号.和双.引号)具备相似含义。两者之间唯一区别在于,在单引号内,您不需要转义(但您必要转义),反之亦然。) spam eggs # single quotesspam eggs doesnt # use to escape the single quote.doesn
3、t doesnt # .or use double quotes insteaddoesnt Yes, he said.Yes, he said. Yes, he said.Yes, he said. Isnt, she said.Isnt, she said.在交互式解释器中,输出字符串用引号括起来,特殊字符用反斜线转义。虽然这有时看起来不同于输入(封闭引号也许会变化),但这两个字符串是等价。如果字符串包括单引号且不带双引号,则该字符串将用双引号括起来,否则将用单引号括起来。该print()函数通过省略封闭引号并打印转义字符和特殊字符,产生更易读输出: Isnt, she said.Isnt
4、, she said. print(Isnt, she said.)Isnt, she said. s = First line.nSecond line. # n means newline s # without print(),n is included in the outputFirst line.nSecond line. print(s) # with print(),n produces a new lineFirst line.Second line.如果您不但愿此前缀字符被解释为特殊字符,则可以通过在第一种引号之前添加一种字符串来使用原始字符串r: print(C:some
5、name) # here n means newline!C:someame print(rC:somename) # note the r before the quoteC:somename字符串文字可以跨越多行。一种办法是使用三引号:.或.。行尾自动包括在字符串中,但可以通过在行尾添加一种来防止这种状况。如下示例:print(Usage:thingy OPTIONS -h Display this usage message -H hostname Hostname to connect to)产生如下输出(请注意,不涉及初始换行符):Usage:thingy OPTIONS -h Di
6、splay this usage message -H hostname Hostname to connect to字符串可以与+操作员串接(粘合在一起),并重复如下操作*: # 3 times un,followed by ium 3 * un + iumunununium两个或各种字符串文字(即引号之间文字)彼此相邻,会自动连接在一起。 Py thonPython当您想要分隔长字符串时,此功能特别有用: text = (Put several strings within parentheses . to have them joined together.) textPut sever
7、al strings within parentheses to have them joined together.这只合用于两个文字,而不是变量或表达式: prefix = Py prefix thon # cant concatenate a variable and a string literal .SyntaxError:invalid syntax (un * 3) ium .SyntaxError:invalid syntax如果要连接变量或变量和文字,请使用+: prefix + thonPython字符串可以被索引(下标),第一种字符索引为0.没有单独字符类型;一种字符只是
8、一种大小为1字符串: word = Python word0 # character in position 0P word5 # character in position 5n指数也也许是负数,从右边开始计算: word-1 # last charactern word-2 # second-last charactero word-6P请注意,由于-0与0相似,负指数从-1开始。除了索引之外,还支持切片。虽然索引用于获取单个字符,但切片容许您获取子字符串: word0:2 # characters from position 0 (included) to 2 (excluded)Py
9、word2:5 # characters from position 2 (included) to 5 (excluded)tho请注意始终包括开始,并始终排除结尾。这可以保证始终等于:s:i+si:s word:2 + word2:Python word:4 + word4:Python切片索引具备有用默认值;省略第一种索引默以为零,省略第二个索引默以为正在切片字符串大小。 word:2 # character from the beginning to position 2 (excluded)Py word4: # characters from position 4 (include
10、d) to the endon word-2: # characters from the second-last (included) to the endon要记住片工作是怎么想指数作为指着一种方向之间字符,第一种字符左边沿编号为0之后字符串最后一种字符右边沿字符具备指数,例如:+ - + - + - + - + - + - + | P | y | t | h | o | n | + - + - + - + - + - + - + 0 1 2 3 4 5 6 - 6 - 5 - 4 - 3 - 2 - 1第一行数字给出字符串中索引0 . 6位置;第二行给出相应负指数。从i到j片段分别由标记
11、为i和j边沿之间所有字符构成。对于非负数指数,如果两者都在边界内,那么切片长度就是指数差值。例如,长度word1:3是2。尝试使用太大索引会导致错误: word42 # the word only has 6 charactersTraceback (most recent call last): File ,line 1,in IndexError:string index out of range但是,超过范畴切片索引在用于切片时会优雅地解决: word4:42on word42:Python字符串不能变化 - 它们是不可变。因而,分派给字符串中索引位置会导致错误: word0 = J .
12、TypeError:str object does not support item assignment word2: = py .TypeError:str object does not support item assignment如果你需要一种不同字符串,你应当创立一种新字符串: J + word1:Jython word:2 + pyPypy内置函数len()返回一种字符串长度: s = supercalifragilisticexpialidocious len(s)341.4 列表Python懂得许多复合数据类型,用于将其她值组合在一起。最通用是该列表,其可以写成方括号之间逗号
13、分隔值(项目)列表。列表也许包括不同类型项目,但普通这些项目都具备相似类型。 squares = 1,4,9,16,25 squares1,4,9,16,25像字符串(以及所有其她内置序列类型),列表可以被索引和切片: squares0 # indexing returns the item1 squares-125 squares-3: # slicing returns a new list9,16,25所有切片操作都会返回一种包括所祈求元素新列表。这意味着下面切片将返回列表新(浅)副本: squares:1,4,9,16,25列表还支持拼接等操作: squares + 36,49,64,
14、81,1001,4,9,16,25,36,49,64,81,100与不可变字符串不同,列表是一种可变类型,即可以更改它们内容: cubes = 1,8,27,65,125 # somethings wrong here 4 * 3 # the cube of 4 is 64,not 65!64 cubes3 = 64 # replace the wrong value cubes1,8,27,64,125您也可以使用该append()办法在列表末尾添加新项目(咱们将在背面看到更多关于办法信息): cubes.append(216) # add the cube of 6 cubes.appen
15、d(7 * 3) # and the cube of 7 cubes1,8,27,64,125,216,343对切片分派也是也许,这甚至可以变化列表大小或完全清除它: letters = a,b,c,d,e,f,g lettersa,b,c,d,e,f,g # replace some values letters2:5 = C,D,E lettersa,b,C,D,E,f,g # now remove them letters2:5 = lettersa,b,f,g # clear the list by replacing all the elements with an empty li
16、st letters: = letters内置函数len()也合用于列表: letters = a,b,c,d len(letters)4可以嵌套列表(创立包括其她列表列表),例如: a = a,b,c n = 1,2,3 x = a,n xa,b,c,1,2,3 x0a,b,c x01b1.5 简朴例子 # Fibonacci series:. # the sum of two elements defines the next. a,b = 0,1 while b x = int(input(Please enter an integer:)Please enter an integer:
17、42 if x # Measure some strings:. words = cat,window,defenestrate for w in words:. print(w,len(w).cat 3window 6defenestrate 12如果您需要修改在循环中迭代序列(例如复制选定项目),建议您先制作一份副本。遍历一种序列并不会隐式地创立一种副本。切片符号使这特别以便: for w in words:: # Loop over a slice copy of the entire list. if len(w) 6:. words.insert(0,w). wordsdefenes
18、trate,cat,window,defenestrate2.3range()如果您的确需要迭代一系列数字,则内置函数range()将派上用场。它生成算术级数: for i in range(5):. print(i).01234给定终点不是生成序列一某些;range(10)生成10个值,即长度为10序列项目合法索引。可以让范畴从另一种数字开始,或者指定一种不同增量(甚至是负数;有时这称为“环节”):range(5,10) 5,6,7,8,9range(0,10,3) 0,3,6,9range(-10,-100,-30) -10,-40,-70要遍历序列指数,你可以结合range()和len(
19、)如下: a = Mary,had,a,little,lamb for i in range(len(a):. print(i,ai).0 Mary1 had2 a3 little4 lamb如果您只打印一种范畴,会发生一件奇怪事情: print(range(10)range(0,10)在许多方面,返回对象range()行为就好像它是一种列表,但事实上并非如此。它是一种对象,它在您迭代时返回所需序列持续项,但它并不真正生成列表,从而节约空间。咱们说这样一种对象是可迭代,也就是说,适合伙为函数和构造目的,盼望它们可以从中获得持续项目,直到耗尽。咱们已经看到这个for陈述是这样一种迭代器。该功能l
20、ist()是另一种;它会依照迭代创立列表: list(range(5)0,1,2,3,42.4 break,continue&elsebreak和在c语言里面同样,用于跳出for和while循环。循环语句也许有一种else子句;当循环通过用尽列表(withfor)或当条件变为false(withwhile)时终结时执行,但当循环由break语句终结时不执行。这由如下循环来举例阐明,该循环搜索素数: for n in range(2,10):. for x in range(2,n):. if n % x = 0:. print(n,equals,x,*,n/x). break. else:.
21、# loop fell through without finding a factor. print(n,is a prime number).2 is a prime number3 is a prime number4 equals 2 * 25 is a prime number6 equals 2 * 37 is a prime number8 equals 2 * 49 equals 3 * 3上述else属于for,而不是ifcontinue语句也从C中借用,继续循环下一次迭代: for num in range(2,10):. if num % 2 = 0:. print(Fo
22、und an even number,num). continue. print(Found a number,num)Found an even number 2Found a number 3Found an even number 4Found a number 5Found an even number 6Found a number 7Found an even number 8Found a number 92.5 pass该pass语句什么也不做。当语句需要语法时可以使用它,但程序不需要任何操作。例如: while True:. pass # Busy-wait for keyb
23、oard interrupt (Ctrl+C).这通惯用于创立最小类: class MyEmptyClass:. pass.另一种地方pass可以作为一种函数或条件体占位符,当你在解决新代码时,容许你继续思考一种更抽象层次。这pass是默默忽视: def initlog(*args):. pass # Remember to implement this!.2.6 定义函数咱们可以创立一种将斐波那契数列写入任意边界函数: def fib(n): # write Fibonacci series up to n. Print a Fibonacci series up to n. a,b = 0
24、,1. while a # Now call the function we just defined:. fib()0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597核心字def引入了一种函数定义。它必要跟随函数名称和形式参数括号括起来列表。构成函数主体语句从下一行开始,并且必要缩进。函数体第一种语句可以可选地是一种字符串文字;此字符串文字是函数文档字符串或docstring。(关于文档字符串更多信息可以在文档字符串某些找到。)有某些工具可以使用文档自动生成在线或打印文档,或让顾客交互式浏览代码;在您编写代码中包括文档字符串是一种较好做
25、法,请养成习惯。函数执行引入了一种用于函数局部变量新符号表。更确切地说,函数中所有变量赋值都将值存储在本地符号表中;而变量引用一方面在本地符号表中查找,然后在封闭函数本地符号表中,然后在全局符号表中,最后在内置名称表中查找。因而,全局变量不能直接在函数内赋值(除非在global语句中命名),尽管它们也许被引用。函数调用实际参数(参数)在被调用函数本地符号表中引入时被调用;因而,参数通过值调用传递(其中值始终是对象引用,而不是对象值)。1当函数调用另一种函数时,为该调用创立一种新本地符号表。函数定义在当前符号表中引入函数名称。函数名称值具备由解释器辨以为顾客定义函数类型。这个值可以分派给另一种名
26、字,然后也可以作为一种函数使用。这是一种通用重命名机制: fib f = fib f (100 )0 1 1 2 3 5 8 13 21 34 55 89来自其她语言,你也许会反对,这fib不是一种函数,而是一种过程,由于它不返回一种值。事实上,虽然没有return声明函数也会返回一种值,尽管这个值很无聊。这个值被调用None(这是一种内置名字)。写入值None普通会被解释器抑制,如果它是唯一写入值。你可以看到它,如果你真想使用print(): fib(0) print(fib(0)None编写一种返回斐波那契数列表函数,而不是打印它函数很简朴: def fib2(n): # return F
27、ibonacci series up to n. Return a list containing the Fibonacci series up to n. result = . a,b = 0,1. while a f100 = fib2(100) # call it f100 # write the result0,1,1,2,3,5,8,13,21,34,55,89像往常同样,这个例子演示了某些新Python特性: 该return语句返回一种函数值。return没有表达式参数返回None。掉落一种函数结尾也会返回None。 该语句result.append(a)调用列表对象办法resu
28、lt。办法是一种“属于”对象并被命名函数obj.methodname,其中obj某个对象(这也许是一种表达式),并且methodname是由该对象类型定义办法名称。不同类型定义不同办法。不同类型办法可以具备相似名称而不会导致歧义。(可以使用类定义自己对象类型和办法,请参阅类)append()示例中显示办法是为列表对象定义;它在列表末尾添加了一种新元素。在这个例子中它相称于result=result+a,但更有效。 2.7带参数函数也可以使用可变数量参数来定义函数。有三种形式,可以合并。2.7.1 默认参数值最有用形式是为一种或各种参数指定默认值。这创立了一种函数,它可以用比它定义容许参数更少参
29、数来调用。例如:def ask_ok(prompt,retries=4,reminder=Please try again!): while True: ok = input(prompt) if ok in (y,ye,yes): return True if ok in (n,no,nop,nope): return False retries = retries - 1 if retries def function(a):. pass. function(0,a=0)Traceback (most recent call last): File ,line 1,in TypeError
30、:function() got multiple values for keyword argument a当表单最后形式参数*name存在时,它会接受一种包括所有核心字参数字典(参见映射类型 - 词典),除了那些相应于正式参数核心字参数。这可以与形式形式参数*name(在下一小节中描述)结合,其接受包括形式参数列表之外位置参数元组。(*name必要在之前浮现*name)。例如,如果咱们定义一种像这样函数:def cheeseshop(kind,*arguments,*keywords): print(- Do you have any,kind,?) print(- Im sorry,wer
31、e all out of,kind) for arg in arguments: print(arg) print(- * 40) for kw in keywords: print(kw,:,keywordskw)它可以这样调用:cheeseshop(Limburger,Its very runny,sir., Its really very,VERY runny,sir., shopkeeper=Michael Palin, client=John Cleese, sketch=Cheese Shop Sketch)固然它会打印:- Do you have any Limburger ?-
32、 Im sorry,were all out of LimburgerIts very runny,sir.Its really very,VERY runny,sir.-shopkeeper :Michael Palinclient :John Cleesesketch :Cheese Shop Sketch请注意,打印核心字参数顺序保证与它们在函数调用中提供顺序相匹配。2.7.3 任意参数列表最后,最不经常使用选项是指定可以用任意数量参数调用一种函数。这些参数将包括在一种元组中(请参阅元组和序列)。在可变数量参数之前,也许会浮现零个或各种正常参数。def write_multiple_items(file,separator,*args): file.write(separator.join(args)普通,这些variadic参数将在形式参数列表中最后一种,由于它们会获取传递给该函数所有剩余输入参数。在参数背面浮现任何形式参数*args都是“仅核心字”参数,这意味着它们只能用作