三元运算符
三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作。
下面是一个伪代码和例子:
伪代码:
#如果条件为真,返回真 否则返回假 condition_is_true if condition else condition_is_false 复制代码
例子:
is_fat = True state = "fat" if is_fat else "not fat" 复制代码
它允许用简单的一行快速判断,而不是使用复杂的多行if语句。 这在大多数时候非常有用,而且可以使代码简单可维护。
另一个晦涩一点的用法比较少见,它使用了元组,请继续看:
伪代码:
#(返回假,返回真)[真或假] (if_test_is_false, if_test_is_true)[test] 复制代码
例子:
fat = True fitness = ("skinny", "fat")[fat] print("Ali is ", fitness) #输出: Ali is fat 复制代码
这之所以能正常工作,是因为在Python中,True等于1,而False等于0,这就相当于在元组中使用0和1来选取数据。
上面的例子没有被广泛使用,而且Python玩家一般不喜欢那样,因为没有Python味儿(Pythonic)。这样的用法很容易把真正的数据与true/false弄混。
另外一个不使用元组条件表达式的缘故是因为在元组中会把两个条件都执行,而if-else的条件表达式不会这样。
例如:
condition = True print(2 if condition else 1/0) #输出: 2 print((1/0, 2)[condition]) #输出ZeroDivisionError异常 复制代码
这是因为在元组中是先建数据,然后用True(1)/False(0)来索引到数据。 而if-else条件表达式遵循普通的if-else逻辑树, 因此,如果逻辑中的条件异常,或者是重计算型(计算较久)的情况下,最好尽量避免使用元组条件表达式。
装饰器
装饰器(Decorators)是Python的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。
首先,让我们讨论下如何写你自己的装饰器。
这可能是最难掌握的概念之一。我们每次只讨论一个步骤,这样你能完全理解它。
一切皆对象
首先我们来理解下Python中的函数
def hi(name="yasoob"): return "hi " + name print(hi()) # output: 'hi yasoob' # 我们甚至可以将一个函数赋值给一个变量,比如 greet = hi # 我们这里没有在使用小括号,因为我们并不是在调用hi函数 # 而是在将它放在greet变量里头。我们尝试运行下这个 print(greet()) # output: 'hi yasoob' # 如果我们删掉旧的hi函数,看看会发生什么! del hi print(hi()) #outputs: NameError print(greet()) #outputs: 'hi yasoob' 复制代码
在函数中定义函数
刚才那些就是函数的基本知识了。我们来让你的知识更进一步。在Python中我们可以在一个函数中定义另一个函数:
def hi(name="yasoob"): print("now you are inside the hi() function") def greet(): return "now you are in the greet() function" def welcome(): return "now you are in the welcome() function" print(greet()) print(welcome()) print("now you are back in the hi() function") hi() #output:now you are inside the hi() function # now you are in the greet() function # now you are in the welcome() function # now you are back in the hi() function # 上面展示了无论何时你调用hi(), greet()和welcome()将会同时被调用。 # 然后greet()和welcome()函数在hi()函数之外是不能访问的,比如: greet() #outputs: NameError: name 'greet' is not defined 复制代码
那现在我们知道了可以在函数中定义另外的函数。也就是说:我们可以创建嵌套的函数。
现在你需要再多学一点,就是函数也能返回函数。
作者:zhulin1028
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。