Python是一种面向对象的脚本语言。Python是用可移植的ANSIC写成的,可以运行在各个平台。
动态类型:使用对象时,不需要复杂的类型和大小的声明。
内置的对象类型:提供常用的数据结构,列表(list),字典(dictionary),字符串(string)既有弹性有益于使用。
内置工具:处理这些对象,python提供功能强大的,标准的操作,包括合并(concatenation),片段(slice),排序(sort),映射(map)等等。
还有库软件,第三方软件,自动内存管理,大型程序的支持。
Python程序可以通过C或C++写成的组件进行扩展,也可以嵌入到C/C++程序中。
Python上有一个可移植的SQL数据库API,可在不同数据库下运行。
dir()函数:不带参数时,返回当前范围内的变量,方法和定义的类型列表;带参数时,返回函数的属性,方法列表。日过参数包含方法
—dir—(),该方法被调用。如果参数不包含—dir—(),该方法将最大限度地收集参数信息。
1.程序是由模块组成的 2.模块中包含语句 3.语句生成并处理对象
字符串变量:
‘Guido\’s’ 可以通过使用一个反斜杠是引号定义
事实上可以在字符串中转移任何特殊字符,python还可以合并临近的字符串常量。例如:a = “a”“is”“letter” ----输出:'aisletter’
r’a\b\c’ 仍保持反斜杠
Python 中的三种操作类别:
数字:支持加和乘等操作
序列:支持索引,分片,合并等操作
映射:支持键索引等操作
无论何时你把对象放到一个数据结构或变量名中,python存储的总是一个对象的引用,而不是对象的一份拷贝。
列表常用操作:
字典:
无序的集合,字典中的项是通过键来存取,而不是通过偏移。
字典有时候又称:关联数组,或散列(hash)
列表是对象引用的数组,字典是无序的对象引用表。
table{}
for item in table.keys():
print(item,’/t’,table[item])
元组(tuple):
任意对象的有序集合,通过偏移存取,属于不可变序列类型,固定长度,异常,任意嵌套,对象引用的数组。
文件:
‘r’代表为输入打开文件,用以输入
‘w’代表为输出生成和打开文件
‘a’代表为在文件尾部追加内容而打开文件
共享的引用:任意一个改变共享列表对象也改变另外两个
== 操作符测试值是否相等
Python运行了一个相等测试,递归所有的内嵌对象is 操作符测试对象的一致性
Python测试它们是否真的是同一个对象(同一个地址)也可以< >来判断列表中嵌套的值大小的比较
Python还有特殊的对象:None 唯一特殊的数据结构。它通常起一个空的占位作用,类似于C语言的中的NULL指针。
内置类型的常见问题:
赋值生成引用,而不是拷贝,若想只改变原数据,不改变被引用的数据。通过拷贝 ,例如:L[:]#一份嵌入的L的拷贝
原理:分片的限定默认为0和被分开的片的长度。如果两个都被分开的话,分片在序列展开每一项。这样就生成一个顶部拷贝(一个新的,不共享的对象。)
不可变类型在原位不可以被改变:元组、字符串:解决的方法利用分片,合并生成新的一个新的对象。
语句:
赋值:
赋值生成对象索引:python赋值在名字或数据结构中存储对象的引用(reference)。它总是生成对象的引用,而不是对象的拷贝。
名字第一次赋值即已生成:无需事先声明。
名字在引用前必须赋值:用一个没赋值的名字是一个错误。
隐式赋值:import,from,def,class,for,函数参数等等
变量名字规则:
语法:下划线或字母 + 任意数量的字母,数字或下划线,必须是下划线或字母开头。
大小写敏感:SPAM与spam不同。
保留字的限制:不可以与Python中有特殊意义的词相同。
得将名字和对象明确区分开。对象有一个类型(整数,列表),可能是可变的或不可变的。名字则相反,只是对对象的引用,他们没有可变的概念,与他们所绑定的对象类型也没有相关的类型信息。
表达式:
可以用表达式作为语句。为了函数和方法的调用,在交互提示符下打印值。
在python中不允许我们在其他表达式中嵌入赋值语句(=)。理由是避免常见的编码错误。当你想使用== 不会因为错误的输入了=而意外的改变一个变量。
作用就是打印对象。严格说,它把对象的文本表示写到标准的输出流中。打印在python很简单,虽然你可以通过调用sys.stdout文件对象的write方法达到同样的效果,但print语句在处理简单的打印工作是一件简单的工具。
import sys
sys.stdout.write(‘hello world\n’)
If开始,然后是else/elif
上面的例子几乎等价于用条件语句。
语句定界符:
如果正在写完一个开放的句法,语句可以跨越多行:语句太长,一行放不下,允许在下一行输入语句。如果正在用()或者[]括起的成分。后续的行可以在任意嵌套层开头。
语句如果以反斜杠开头的话可以跨越多行:初始行加上反斜杠()以指示要在下一行继续。
很长的字符串常量可以任意跨越多行。
真值测试:
真代表着任意非空的数或非空的对象。
假代表着不真:数0,空的对象或者None
比较或判断相等返回1或者0(真或假)
and 和 or 布尔操作返回一个真或假的操作数对象
对于or测试,Python从左到右检测操作都有对象,返回的一个值为真的对象。发现第一个值为真的时候停止停止检测。通常称为短路检测。
Break,continue,pass,else循环:
Break: 跳出最近的包围它的循环
Continue:跳至最近的包围它的循环顶部(到循环的首行)
Pass:什么都不做,只是一占位的空语句
判断y是否为一个素数:
一般形式:
没有return语句的函数自动返回一个None对象。
函数中的作用域规则:默认时,函数内部赋值的名字与函数的名字空间关联。我们通常说函数定义了一个局部作用域,模块定义了一个全局作用域。
**模块是一个全局作用域:**每一个模块是一个全局作用域 — 一个名字空间,变量名在一个模块文件顶层生成(赋值)。
**对函数的每个调用是一个新的局部作用域:**每次你调用一个函数,生成一个新的局部作用域 – 是在函数的内部生成的名字所在的一个名字空间。
**赋值的名字是局部的,除非声明是全局:**默认情况,在函数中赋值的名字都放到局部作用域中。如果需要一个名字,而该名字又在包括该函数的模块顶层的话,你可以通过一个函数中用一个global语句声明是全局的。
**所有其他的名字都是全局的或内置的:**函数定义中每赋值的名字军被认为是全局的或内置的。
LGB规则:先局部(Local),次之全局(Global),次之内置(Built-in)
当在一个函数中赋值一个名字时,python总是在局部作用域中生成或改变他,除非在该函数已对它进行了全局声明。当在函数外部时,局部作用域与全局作用域一样 –都是一个模块的名字空间。
Return可以返回任何种类的对象,通过在一个元祖中打包他们,它可以返回多个值。
参数匹配:从左到右,通过参数名匹配,可变参数,参数的指定值不被传递。
当关键词参数在调用时,参数列出的顺序无关紧要;
在调用中,关键字参数必须出现在所有非关键字参数后。
在一个函数首部中,*name必须在普通参数和默认值后,**name必须在最后。
Lambda表达式:
Lambda是一个表达式,不是一个语句。它返回一个值,它可以被赋给一个名字。
F = lambda x,y,z: x+y+z F(2,3,4) 9
但一个函数无法准确的返回值是,函数就跳至尾部并退出。严格地说,所有函数都返回一个值,若你不能提供一个返回值,就会返回None。
实际推荐这样做。
不想每次调用都列表增加,解决如下
import : 允许客户按整体取得一个模块
from: 允许客户从一个模块中取得某些特定的名字
reload: 提供了一种无需停止Python就可以重载模块代码的方法。
模块和类实际上是修饰过的名字空间(namespace)。
生成的模块形式:Python文件,C扩展程序:很多Python的内置工具事实上都是导入的C扩展模块。
Python通过检查所有在PYTHONPATH环境变量中列出的目录,来查找可以导入的模块。
用Python的术语来说,模块就是名字空间———生成名字的地方。存在模块中的名字称为它的属性(attribute)。
为了强迫一个模块代码重新载入,重运行,你需要通过调用reload内置函数明确地告诉Python这样做。
一般形式:
与import和from不同:
reload是Python中的一个内置函数,不是一个语句。
reload的参数是现有的模块对象,不只是一个名字。
(C的扩展模块也可以在运行的时候被动态载入,但它们不能被重载)
reload影响所有用import取得模块的客户。先前用from取得属性的客户不受reload影响。
模块编译模式:
Python系统通常被称作一个解释器。不过实际上介于传统解释器和编译器二者之间。与Java相同,Python程序被编译为一种称之为字节码的中间形式。
他在虚拟机上执行。 Python是解释性的,不过首先它仍将进过一个编译阶段。编译步骤是在Python中是自动的和隐藏的。
Python在模块第一次导入的时候自动把他们编译成字节码。而且,Python试图保存字节码到一个文件中,这样将来如果源文件没有改变的话可以避免重新编译。.pyc文件即是保存生成的模块字节码的。
当一个模块M导入,Python载入一个M.pyc的字节码文件代替相应的M.py源文件。
混合模式:__ name __ 和 __ main __:
既可以允许你导入一个模块,又可作为一个独立程序运行它。每个模块都有一个内置属性叫__ name __ ,Python中设定: