Python进阶系列(三)

举报
zhulin1028 发表于 2022/06/17 00:38:29 2022/06/17
【摘要】 目录 三元运算符 装饰器 一切皆对象 在函数中定义函数 三元运算符 三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作。 下面是一个伪代码和例子: 伪代码: #如果条件为真,返回真 否则返回假 condition_is_t...

目录

三元运算符

装饰器

一切皆对象

在函数中定义函数


三元运算符

三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作。

下面是一个伪代码和例子:

伪代码:


  
  1. #如果条件为真,返回真 否则返回假
  2. condition_is_true if condition else condition_is_false

例子:


  
  1. is_fat = True
  2. state = "fat" if is_fat else "not fat"

它允许用简单的一行快速判断,而不是使用复杂的多行if语句。 这在大多数时候非常有用,而且可以使代码简单可维护。

另一个晦涩一点的用法比较少见,它使用了元组,请继续看:

伪代码:


  
  1. #(返回假,返回真)[真或假]
  2. (if_test_is_false, if_test_is_true)[test]

例子:


  
  1. fat = True
  2. fitness = ("skinny", "fat")[fat]
  3. print("Ali is ", fitness)
  4. #输出: Ali is fat

这之所以能正常工作,是因为在Python中,True等于1,而False等于0,这就相当于在元组中使用0和1来选取数据。

上面的例子没有被广泛使用,而且Python玩家一般不喜欢那样,因为没有Python味儿(Pythonic)。这样的用法很容易把真正的数据与true/false弄混。

另外一个不使用元组条件表达式的缘故是因为在元组中会把两个条件都执行,而if-else的条件表达式不会这样。

例如:


  
  1. condition = True
  2. print(2 if condition else 1/0)
  3. #输出: 2
  4. print((1/0, 2)[condition])
  5. #输出ZeroDivisionError异常

这是因为在元组中是先建数据,然后用True(1)/False(0)来索引到数据。 而if-else条件表达式遵循普通的if-else逻辑树, 因此,如果逻辑中的条件异常,或者是重计算型(计算较久)的情况下,最好尽量避免使用元组条件表达式。

装饰器

装饰器(Decorators)是Python的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。

首先,让我们讨论下如何写你自己的装饰器。

这可能是最难掌握的概念之一。我们每次只讨论一个步骤,这样你能完全理解它。

一切皆对象

首先我们来理解下Python中的函数


  
  1. def hi(name="yasoob"):
  2.     return "hi " + name
  3. print(hi())
  4. # output: 'hi yasoob'
  5. # 我们甚至可以将一个函数赋值给一个变量,比如
  6. greet = hi
  7. # 我们这里没有在使用小括号,因为我们并不是在调用hi函数
  8. # 而是在将它放在greet变量里头。我们尝试运行下这个
  9. print(greet())
  10. # output: 'hi yasoob'
  11. # 如果我们删掉旧的hi函数,看看会发生什么!
  12. del hi
  13. print(hi())
  14. #outputs: NameError
  15. print(greet())
  16. #outputs: 'hi yasoob'

在函数中定义函数

刚才那些就是函数的基本知识了。我们来让你的知识更进一步。在Python中我们可以在一个函数中定义另一个函数:


  
  1. def hi(name="yasoob"):
  2.     print("now you are inside the hi() function")
  3.     def greet():
  4.         return "now you are in the greet() function"
  5.     def welcome():
  6.         return "now you are in the welcome() function"
  7.     print(greet())
  8.     print(welcome())
  9.     print("now you are back in the hi() function")
  10. hi()
  11. #output:now you are inside the hi() function
  12. #       now you are in the greet() function
  13. #       now you are in the welcome() function
  14. #       now you are back in the hi() function
  15. # 上面展示了无论何时你调用hi(), greet()和welcome()将会同时被调用。
  16. # 然后greet()和welcome()函数在hi()函数之外是不能访问的,比如:
  17. greet()
  18. #outputs: NameError: name 'greet' is not defined

那现在我们知道了可以在函数中定义另外的函数。也就是说:我们可以创建嵌套的函数。

现在你需要再多学一点,就是函数也能返回函数。

文章来源: zhulin1028.blog.csdn.net,作者:zhulin1028,版权归原作者所有,如需转载,请联系作者。

原文链接:zhulin1028.blog.csdn.net/article/details/124410840

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。