有关Python语法介绍说明
创始人
2024-06-22 11:40:29
0

本文主要讲述Python语法的相关文章,怎样编写Python语法的一些做法,这些内容都是一些门户网站和技术论坛找到的,中间可能有不少错误是我没有挑出的,欢迎大家指正。

接下来说下我遇到的问题,本来想学下lambda用法(现在还没搞明白),就在网上找了个例子,如下(print语法我已经改了。

  1. class People:     
  2.     age=0    
  3.     gender='male'    
  4.     def __init__(self, age, gender):       
  5.         self.age = age       
  6.         self.gender = gender     
  7.     def toString(self):     
  8.         return 'Age:'+str(self.age)+'\tGender:'+self.gender     
  9.          
  10. List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]     
  11. print('Befor sort:')     
  12. for p in List:     
  13.     print(p.toString())     
  14. List.sort(lambda p1,p2:cmp(p1.age,p2.age))     
  15. print('\nAfter ascending sort:')     
  16. for p in List:     
  17.     print(p.toString())     
  18. List.sort(lambda p1,p2:-cmp(p1.age,p2.age))     
  19. print('\nAfter descending sort:')     
  20. for p in List:     
  21.     print(p.toString()) 

重点:Python语法指定含有一个参数的函数,这个函数被用来提取各个元素之间比较用的关键字(现在看来,这个用法比用lambda更明了些)根据这个提示,终于明白了,我要比较List中每个元素大小,每个元素都是People类,用age成员作为比较关键字,所以很简单联想到要给key赋一个方法,这个方法返回People中的age,所以修改后代码如下:

  1. class People:     
  2.     age=0    
  3.     gender='male'    
  4.     def __init__(self, age, gender):       
  5.         self.age = age       
  6.         self.gender = gender     
  7.     def toString(self):     
  8.         return 'Age:'+str(self.age)+'\tGender:'+self.gender     
  9.          
  10. List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]     
  11. print('Befor sort:')     
  12. for p in List:     
  13.     print(p.toString())     
  14. List.sort(lambda p1,p2:cmp(p1.age,p2.age))     
  15. print('\nAfter ascending sort:')     
  16. for p in List:     
  17.     print(p.toString())     
  18. List.sort(lambda p1,p2:-cmp(p1.age,p2.age))     
  19. print('\nAfter descending sort:')     
  20. for p in List:     
  21.     print(p.toString()) 

前两天把《A Byte of Python》大致看了一遍,算是基本可能入门了。动手写了些很简单的小例子,对Python语法有个基本的了解。但是还有一些细节不是很清楚,有些地方可能知其然不知所以然,还有待更深入的学习。今天再翻《Dive into python》,发现写出书上那么简洁但是功能强大的程序还是需要一段时间的。

关于函数定义:函数定义不需要定义返回的数据类型,不需要指定参数的类型。在Python 中, 永远也不需要明确指定任何东西的数据类型。举个例子:char *ret = (x!=0) ? "True" : "False"这行代码对应的python形式就是ret = (x and "True") or "False"(很简单吧,事实上括号可以去掉)。

运行时,python虚拟机会对赋值符右边的布尔表达式(注意这里并非三元表达式)求值,返回值是***一个被分析到的值。为什么是“***一个被分析到的”而不是表达式中“***一个”呢?因为布尔表达式有一个短路效应,比如a or b,如果a为真那么就不会分析b了。#t#

嗯,估计现在大家差不多明白了这行python代码的原理了。如果x为真,由于字符串“True”也为真,于是返回"True",反之,x为假,那么就没必要看字符串"True"了(短路效应),直接返回"False"。不难看出,三元运算在Python语法中事实上可以通过借用布尔求值表达。然后,有时会有点小问题。举个例子,char *ret = x ? "" or "VAL"。

根据前面的例子,我们很自然想到在python里应该这样写,ret = x and "" or "VAL"。错了!不管x的布尔求值是真还是假,ret得到的总是"VAL"。奇怪么?不奇怪,因为在python中对空字符串的布尔求值为false,这样x and ""永远都是false,所以ret得到的自然总是"VAL"了。

解决这个问题有两种办法,***种,也是我喜欢的一种,就是写成ret = not x and "VAL" or ""。第二种,麻烦一点ret=x and [""] or ["VAL"],然后每次取ret[0]作为返回值,这是因为[""]在布尔求值时值为true。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...