可能会有零到多个 elif 部分,else 是可选的。关键字 ‘elif‘ 是 ’else if’ 的缩写,这个可以有效地避免过深的缩进。if … elif … elif … 序列用于替代其它语言中的 switch 或 case 语句(没有switch)。
>>> x = int(input("Please enter an integer: ")) Please enter an integer: 42 >>> if x < 0: ... x = 0 ... print('Negative changed to zero') ... elif x == 0: ... print('Zero') ... elif x == 1: ... print('Single') ... else: ... print('More') ...Python 中的 for 语句和 C 或 Pascal 中的略有不同。Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。
在迭代过程中修改迭代序列不安全。
>>> # Measure some strings: ... words = ['cat', 'window', 'defenestrate'] ... if len(w) > 6: ... words.insert(0, w) ... >>> words ['defenestrate', 'cat', 'window', 'defenestrate']如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差级数链表:
range(5, 10) 5 through 9 range(0, 10, 3) 0, 3, 6, 9 range(-10, -100, -30) -10, -40, -70不过,这种场合可以方便的使用 enumerate()
在不同方面 range() 函数返回的对象表现为它是一个列表,但事实上它并不是。当你迭代它时,它是一个能够像期望的序列返回连续项的对象;但为了节省空间,它并不真正构造列表。所以你应该这样:
>>> list(range(5)) [0, 1, 2, 3, 4]break 语句和 C 中的类似,用于跳出最近的一级 for 或 while 循环。 continue 语句是从 C 中借鉴来的,它表示循环继续执行下一次迭代。 循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 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: ... # loop fell through without finding a factor ... # else 语句是属于 for 循环之中, 不是 if 语句。 ... print(n, 'is a prime number') ... 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3注意:循环的 else 子句在未出现 break 时运行!! 与循环一起使用时,else 子句与 try 语句的 else 子句比与 if 语句的具有更多的共同点: try 语句的 else 子句在未出现异常时运行, 循环的 else 子句在未出现 break 时运行。
pass 语句什么也不做。它用于那些语法上必须要有什么语句,但程序什么也不做的场合,例如:
>>> while True: ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ...这通常用于创建最小结构的类:
>>> class MyEmptyClass: ... pass关键字 def 引入了一个函数 定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。
函数名指代的值(即函数体)有一个被 Python 解释器认定为 用户自定义函数 的类型。 这个值可以赋予其他的名字(即变量名),然后它也可以被当做函数使用。这可以作为通用的重命名机制:
>>> fib <function fib at 10042ed0> >>> f = fib >>> f(100) 0 1 1 2 3 5 8 13 21 34 55 89默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的
def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 这将输出: [1] [1, 2] [1, 2, 3]不想让默认值在后续调用中累积,你可以像下面一样定义函数:
def f(a, L=None): if L is None: L = [] L.append(a) return L函数可以通过 关键字参数 的形式来调用,形如 keyword = value。例如,以下的函数:
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This parrot wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!") #接受一个必选参数 (voltage) 以及三个可选参数 (state, action, 和 type)。不过以下几种调用是无效的:
parrot() # required argument missing parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument parrot(110, voltage=220) # duplicate value for the same argument parrot(actor='John Cleese') # unknown keyword argument引入一个形如 **name 的参数时,它接收一个字典。 使用一个形如 *name 的形式参数,它接收一个元组。 ( *name 必须在 **name 之前出现)。 例如,
def cheeseshop(kind, *arguments, **keywords): print("-- Do you have any", kind, "?") print("-- I'm sorry, we're all out of", kind) for arg in arguments: print(arg) print("-" * 40) keys = sorted(keywords.keys()) for kw in keys: print(kw, ":", keywords[kw]) 它可以像这样调用: cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Palin", client="John Cleese", sketch="Cheese Shop Sketch")最后,一个最不常用的选择是可以让函数调用可变个数的参数。这些参数被包装进一个元组(参见 元组和序列 )。在这些可变个数的参数之前,可以有零到多个普通的参数
>>> def concat(*args, sep="/"): ... return sep.join(args) ... >>> concat("earth", "mars", "venus") 'earth/mars/venus' >>> concat("earth", "mars", "venus", sep=".") 'earth.mars.venus'通过 lambda 关键字,可以创建短小的匿名函数。 Lambda 形式可以用于任何需要的函数对象。 出于语法限制,它们只能有一个单独的表达式。
例子1: >>> def make_incrementor(n): ... return lambda x: x + n 例子2: >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] >>> pairs.sort(key=lambda pair: pair[1]) >>> pairs [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]