http://www.cnblogs.com/mcdou/archive/2011/08/02/2125016.html

Python的设计目标之一是让源代码具备高度的可读性。它设计时尽量使用其它语言经常使用的标点符号和英语单词,让源代码整体看起来很整洁美观。它不像静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。

缩进

Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且在Python语言里,缩进而非花括号或者某种关键字,被用于表示语句块的开始和退出。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如

if语句:

ifage<21:print("你不能買酒。")print("不過你能買口香糖。")print("這句話處於if語句塊的外面。")

根据PEP的规定,必须使用4个空格来表示每级缩进。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为了兼容很旧的Python程序和某些有问题的编辑器。

语句和控制流

if语句,当条件成立时执行语句块。经常与else,elif(相当于else if)配合使用。

for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。

while语句,当条件为真时,循环执行语句块。

try语句。与except,finally配合使用处理在程序运行中出现的异常情况。

class语句。用于定义类型。

def语句。用于定义函数和类型的方法。

pass语句。表示此行为空,不执行任何操作。

assert语句。用于程序调试阶段时测试运行条件是否满足。

with语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行结束后释放它。

yield语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。

表达式

Python的表达式写法与C/C++类似。只是在某些写法有所差别。

主要的算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <, =用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <>必须应用于整数。

Python使用and, or, not表示逻辑运算。

is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。

Python支持"列表推导式"(list comprehension),比如计算0-9的平方和:

>>>sum(x*xforxinrange(10))285

Python使用lambda表示匿名函数。匿名函数体只能是表达式。比如:

>>>add=lambdax, y : x+y>>>add(3,2)5

Python使用y if cond else x表示条件表达式。意思是当cond为真时,表达式的值为y,否则表达式的值为x。相当于C++和Java里的cond?y:x。

Python区分列表(list)和元组(tuple)两种类型。list的写法是[1,2,3],而tuple的写法是(1,2,3)。可以改变list中的元素,而不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,比如:

>>>x, y=1,2#同时给x,y赋值,最终结果:x=1, y=2

特别地,可以使用以下这种形式来交换两个变量的值:

>>>x, y=y, x#最终结果:y=1, x=2

Python使用'(单引号)和"(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不一样,两种符号作用相同。一般地,如果字符串中出现了双引号,就使用单引号来表示字符串;反之则使用双引号。如果都没有出现,就依个人喜好选择。出现在字符串中的\(反斜杠)被解释为特殊字符,比如\n表示换行符。表达式前加r指示Python不解释字符串中出现的\。这种写法通常用于编写正则表达式或者Windows文件路径。

Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的类型有str, bytes, list, tuple等。它的语法是...[left:right]或者...[left:right:stride]。假定nums变量的值是[1, 3, 5, 7, 8, 13, 20],那么下面几个语句为真:

nums[2:5] == [5, 7, 8] 从下标为2的元素切割到下标为5的元素,但不包含下标为2的元素。

nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最后一个元素。

nums[:-3] == [1, 3, 5, 7] 从最开始的元素一直切割到倒数第3个元素。

nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回所有元素。改变新的列表不会影响到nums。

nums[1:5:2] == [3, 7]

函数

Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写”文档字符串“(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。比如:

1 >>>defrandint(a, b):2 ..."Return random integer in range [a, b], including both end points."3 ...4 >>>help(randint)5 Help on function randintinmodule__main__:6 7 randint(a, b)8 Return random integerinrange [a, b], including both end points.

对象的方法

对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)。它等价于调用Class.method(instance, arguments)。当定义对象方法时,必须显式地定义第一个参数为self,用于访问对象的内部数据。self相当于C++, Java里面的this变量。比如:

classFish:defeat(self, food):iffoodisnotNone:

self.hungry=False#构造Fish的实例:f=Fish()#以下两种调用形式是等价的:Fish.eat(f,"earthworm")

f.eat("earthworm")

Python认识一些以”__“开始并以"__"结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。

类型

Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。

与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的Fish类型,使用Fish()。类型本身也是特殊类型type的对象(type类型本身也是type对象),这种特殊的设计允许对类型进行反射编程。

Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):

类型

描述

例子

str

一个由字符组成的不可更改的有串行。在Python 3.x里,字符串由Unicode字符组成。

'Wikipedia'

"Wikipedia"

"""Spanning

multiple

lines"""

bytes

一个由字节组成的不可更改的有串行。

b'Some ASCII'

b"Some ASCII"

list

可以包含多种类型的可改变的有串行

[4.0, 'string', True]

tuple

可以包含多种类型的不可改变的有串行

(4.0, 'string', True)

set, frozenset

与数学中集合的概念类似。无序的、每个元素唯一。

{4.0, 'string', True}

frozenset([4.0, 'string', True])

dict

一个可改变的由键值对组成的无串行。

{'key1': 1.0, 3: False}

int

精度不限的整数

42

float

浮点数。精度与系统相关。

3.1415927

complex

复数

3+2.7j

bool

逻辑值。只有两个值:真、假

True

False

除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。

数学运算

Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数abs()外,大多数数学函数处于math和cmath模块内。前者用于实数运算,而后者用于复数运算。使用时需要先导入它们,比如:

>>>importmath>>>print(math.sin(math.pi/2))1.0

fractions模块用于支持分数运算;decimal模块用于支持高精度的浮点数运算。

Python定义求余运行a % b的值处于开区间[0, b)内,如果b是负数,开区间变为(b, 0]。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程式:b * (a // b) + a % b = a恒真,整除运行需要向负无穷小方向取值。比如7 // 3的结果是2,而(-7) // 3的结果却是-3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。

Python允许像数学的常用写法那样连着写两个比较运行符。比如a < b < c与a < b and b < c等价。C++的结果与Python不一样,首先它会先计算a < b,根据两者的大小获得0或者1两个值之一,然后再与c进行比较。

python整体设计目标_Python 入門語法和類型(学习)相关推荐

  1. 天天向上python题目答案_Python入門習題3.天天向上

    例3.1 一年365天,以第一天的能力值為基數,記為1.0,當好好學習時能力值相比前一天提高1%,當沒有學習時能力值相比前一天下降1%.每天努力(dayup)和每天放任(daydown),一年下來的能 ...

  2. python的整体设计目标_python之总体理解

    作为脚本,python具备了弱类型语言的灵活性,便捷性.这在日常的开发使用中能够大幅度的减轻开发人员的编码负担,开发者也能够将精力集中在程序的逻辑管理和总体构架设计上.一般而言,随着经验的积累,开发人 ...

  3. python通信原理_python入门第三十三天--网络通信原理(补充)

    1.互联网的本质就是一系列的网络协议 一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用 像这样,每个人都拥有一台自己的机器,然而彼此孤立 英语成为世界上所有人通信的统一标准, ...

  4. python 基础代谢率计算_python 入门第三天 BMR基础代谢率的计算

    #案例1 ''' 作者:网络小虾米 功能:BMR计算器 版本:1.0 日期:10-10-2019 ''' def main(): ''' 主函数 ''' #性别 gender = "男/女/ ...

  5. python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》

    在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...

  6. python定义符号常量_python注释、变量、常量的学习

    注释.变量.常量的学习 注释 什么是注释 注释是对代码的解释,方便后期的阅读代码,可以使在后期的代码维护中事半功倍. 注释的作用 注释可以用来排查代码中的BUG,在一段有BUG的代码当中,用注释选中其 ...

  7. python 量化交易_Python量化交易,tushare与talib学习示例演示,双均线(DMA)买卖策略...

    本篇文章为tushare与talib的学习示例,通过双均线策略演示如何使用talib与tushare.下面我们对代码进行详细解析. 引入3个包,分别是talib,tushare和pandas impo ...

  8. python集合常用方法_Python中集合类型(set)学习小结

    set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引.分片等类序列的操作. 初始化 复制代码 代码如下: s0 = set() d0 = { ...

  9. python期货基本面分析_Python股票期货交易利器,砖型图详细绘制教程!

    一.砖型图简介. 在所有行情软件中,记录价格波动轨迹的几乎都是K线图,只有在很少的程序化量化软件中才有砖型图的身影. 热卷hc2005 砖型图顾名思义,相当于是用砖头一块一块地拼凑而成记录价格波动轨迹 ...

最新文章

  1. 33岁180程序员去相亲,被人嫌弃工资不够高,房子不是学区房,网友炸了!
  2. 为什么要选择html5,5分钟告诉你,为什么要学HTML5大前端
  3. Leangoo看板工具做敏捷故事地图看板示例
  4. 使用webpack、vue来开发一个todo项目
  5. 观看马云网商大会视频的一些感想.
  6. python数据储存_五种使用python储存数据的方式
  7. jQuery Validate验证方法及教程
  8. 【测试点分析】1060 爱丁顿数 (25分)_21行代码
  9. Google Webmaster Tools 结构化数据标记使用入门指南
  10. 使用maven-war-plugin 打包时排除不需要的文件
  11. Spring : Spring Aop之ProxyFactory
  12. 从零开始打造数据中心的N道门槛 | 又拍干货分享
  13. java的class文件反编译
  14. 批量保存打开的网页到本地
  15. uniapp适配pc_uniapp+Html5端实现PC端适配
  16. 使用Notepad++实现文本编辑的豆沙绿背景颜色,护眼
  17. 杜比dss200服务器系统升级包434,杜比数字影院系统DSS200软件升级指南(初稿).pdf
  18. 华工高级语言程序设计c十十作业,华工高级语言程序设计c随堂练习答案
  19. 百度地图android版 v4.0,百度地图4.0正式发布 支持iOS与Android
  20. 区块链发展阶段及应用场景

热门文章

  1. rdkafka线程过多_Kafka/RocketMQ 多线程消费时如何保证消费顺序?
  2. oracle备份还原到本地_RMAN备份的基本操作与代码口令
  3. 【计算机科学基础】计算机概述
  4. 【计算机网络】Quiz集合
  5. 【数据库系统】实例和模式
  6. 【Java】整数存储单元的设计与模拟
  7. Java-Socket实现文件的断点续传
  8. 聊聊zxing的qrcode
  9. SSH框架中怎么使用Hibernate查询一个对象
  10. 采用Angular勾画SVG圆环形进度条