1.前言
python大法好
2.python介绍
python大法好
3.安装
环境变量 python提示符
4.最初的步骤
IDLE,退出ptthon解释器ctrl-d,ctrl-z-enter
Python 至少应当有第一行那样的特殊形式的注释。它被称作组织行—— 源文件的头两个字符是#! ,后面跟着一个程序。这行告诉你的Linux/Unix 系统当你执行你的程序的时候,它应该运行哪个解释器。
可执行的Python 程序
echo 命令来显示PATH 变量
Help函数
5.基础
整数,浮点数,复数 字符串 '' "" ''' ''' \ rR自然字符串 字符串按字面意义拼接 format 缩进
6.操作符和表达式
+ - * ** / // % << >> ^ & | ~ < > <= >= == != not and or
7.控制流
If:elif:else while:else for in break continue
8.函数
全局变量global:
我们使用global 语句完成这一功能。没有global 语句,
是不可能为定义在函数外的变量赋值的。
非局部变量nonlocal:
当在函数func_inner 的内部时,既不是在局部范围也不是在全局的作用域中,使用这样的x 称之为非局部x
默认参数值:只有在形参表末尾的那些参数可以有默认参数值
def say(message, times = 1):
print(message * times)
关键参数:
我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参
VarArgs 参数:
有时,你或许想定义一个能获取任意个数参数的函数,这可通过使用* 号来实现,**Map *list
Keyword-only 参数:
如果想指定特定的关键参数为keywor-only 而不是位置参数,可以在带星的参数后申明.
如果你想使用keyword-only 参数,但又不需要带星的参数,可以简单地使用不适
用名字的空星,如def total(initial=5, *, vegetables)。
没有返回值的return 语句等价于return None 。None 是Python 中表示没有任何东西的特殊类型。
pass 语句在Python 中表示一个空的语句块。
DocStrings:
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。可以使用__doc__(注意双下划线)调用
9,模块
Import sys sys.argv 包含了命令行参数的列表,即使用命令行传递给你的程序的参数。
.pyc相当于class字节码
from sys import *
每个Python 模块都有它的__name__,如果它是’__main__’,这说明这个模块被用户单独运行
这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一
from mymodule import *这回导入像sayhi 这样公用的名字,但不会导入__version__,因为它是以双下划线开始的。
关于del 的注释—— 该语句用于删除变量/名字,在运行语句后,。在这个例子中,del a,你将无法再使用变量a—— 它就好像从来没有存在过一样。
当你为dir() 提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。
包是模块的文件夹,有一个特殊的__init__.py 文件,用来表明这个文件夹是特殊的因为其包含有Python 模块。
10.数据结构
Python 中有四种内建的数据结构—— 列表list[,,,]、元组、字典和集合。
列表:列表是可变的数据类型,[,]中括号,append()
print 函数的end 关键参数来表示以空格结束输出,而不是通常的换行
用sort 方法将列表进行排序
想要从列表中移去那一项,用del 语句将其移除
元组:组通过圆括号中用逗号分割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用
的元组的值不会改变。到len 函数可以用来获取元组的长度.注意元组之内的元组不会失去它的特性,new_zoo[2][2] 来访问new_zoo 元组的第三个项目的第三个项目。
print(1,2,3) 和print((1,2,3)) 意义不同—— 前一个打印三个数字,而后一个打印出一个元组(包含三个数)。
含有0 个或1 个项目的元组:一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号.
字典:键值对在字典中以这样的方式标记:d = key1 : value1, key2 : value2 。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。记住字典中的键/值对是没有顺序的。
字典的items 方法,来使用字典中的每个键/值对,我们可以使用in 操作符来检验一个键/值对是否存在,或者使用dict 类的has_key方法
序列:列表、元组和字符串都是序列.
下标操作。每当你用方括号中的一个数来指定一个序列.索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的
切片操作:切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。注意这与你使用的索引操作符十分相似。记住数是可选的,而冒号是必须的。切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。如果不指定第一个数,Python 就从序列首开始。如果没有指定第二个数,则Python 会停止在序列尾。注意,返回的序列从开始位置开始,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。你也可以给切片规定第三个参数,就是切片的步长(默认步长是1)
集合:集合是没有顺序的简单对象的聚集,当在聚集中一个对象的存在比其顺序或者出现的次数重要时使用集合。 set(['brazil', 'russia', 'india'])
引用:当你创建一个对象并给它赋一个变量的时候,这个变量仅仅引用那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。被称作名称到对象的绑定。你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象),那么你必须使用切片操作符来取得拷贝。
字符串:startwith 方法是用来测试字符串是否以给定字符串开始。in 操作符用来检验一个给定字符串是否为另一个字符串的一部分。find 方法用来找出给定字符串在另一个字符串中的位置,或者返回-1 以表示找不到子字符串。str 类也有以一个作为分隔符的字符串join 序列的项目的整洁的方法,它返回一个生成的大字符串。
11 .解决问题
os.system
os.sep
ime.strftime()
记住我们可以使用物理行尾的反斜杠来表示逻辑行在下一物理行继续。
12.面向对象编程class=class()
类的方法与普通的函数只有一个特别的区别—— 它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python 会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
__init__ 方法:__init__ 方法在类的一个对象被建立时,马上运行,相当于构造函数 self.name?属于对象变量
类和对象变量:
类的变量由一个类的所有对象(实例)共享使用.对象的变量由类的每个对象/实例拥有,我们使用Robot.population 来引用population 类变量,该对象的方法中用self.name 来引用对象变量name。一个与类变量有相同名字的对象变量会隐藏类变量
静态方法1 @staticmethod,howMany = staticmethod(howMany)
Robot.__doc__ 来获得类的docstring
__del__:__del__,它在对象消逝的时候被调用,当对象不再被使用时,__del__ 方法运行,如果你想要指明它的运行,你就得使用del 语句
Python 中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。只有一个例外:如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python 的名称管理体系会有效地把它作为私有变量.惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀,不会强制
继承:基类名称作为元组跟在定义类的类名称之后,python不会自动调用基类的__init__方法,必须显式调用
Python 总是首先查找对应类型的方法,在这个例子中就是如此。如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的
13.输入输出
input和print
Str() rjust右对齐
切片特性文本逆转text[::-1]
文件:file类的read、readline、write、close,w、r、a(写读追加)
Print(end=‘’)制约新行的产生
pickle模块序列化反序列化dump-picking,load-unpicking
14.异常
Ctrl-d,EOFError错误
Try…except语句来处理异常,try-except-else
except 从句可以专门处理单一的错误或异常,或者一组包括在圆括号内的错误/异常。如果没有给出错误或异常的名称,它会处理所有的错误和异常。注意:对于每个try 从句,至少都有一个相关联的except 从句。else 从句。当没有异常发生的时候,else 从句将被执行。
raise语句引发异常(Error or Exception)
Try except finally,finally语句依然被执行
With 语句 with open('txt') as f,在启动代码块前调用thefile.__enter__函数,结束后调用thefile.__exit__函数
15.标准库
sys模块包含了系统指定的函数功能,sys.argv,sys.version_info[0]版本信息,warning模块来给用户显示警告信息
logging模块:os 模块用来和操作系统交互,platform 模块用来得到平台的信息,例如像操作系统平台,logging 模块用来记录信息(platform.platform,os.path.join())
urlib和json模块:urllib.request.urlopen() 函数连接到这个URL ,将文件句柄传递给json.load() ,它会读取其中的内容,同时转换为Python 对象
week系列模块、python标准库文档
16.更多内容
你曾想过在一个函数中返回两个不同的值吗?你可以。要做的就是使用元组。
注意a, b = <some expression> 可以解释为有两个值的元组表达式的结果。如果想将结果解释为(a, <everything else>),你需要用星来表示,就如在函数参数中的那样。
在Python 中这也意味着交换两个变量的最快的方式: a, b = b, a
特殊的方法用来模仿内置类型的确定动作。例如,如果你想对类使用x[key] 角标操作(就像你在列表和元组中那样),那么你只需要实现__getitem__() 方法就可以了
单语句模块:如果你的语句块只包含一句语句,那么你可以在条件语句或循环语句的同一行指明 if flag: print 'Yes'
lambda:这里,我们使用了make_repeater 函数在运行时创建新的函数对象,并且返回它。lambda 语句用来创建函数对象。本质上,lambda 需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print 语句也不能用在lambda 形式中,只能使用表达式。
列表综合:通过列表综合,可以从一个已有的列表导出一个新的列表
在函数中接收元组和列表当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用* 和** 前缀
因为在args 变量前面用了* 前缀,所有传递给函数的多余的参数都被存储在元组args 中。如果用** 前缀,额外的参数都会被以键/值的方式存储在字典中
exec 语句用来执行储存在字符串或文件中的Python 语句。例如,我们可以在运行时生成一个包含Python 代码的字符串,然后使用exec 语句执行这些语句,eval 函数用来执行存储在字符串中的Python 表达式《表达式和语句》
当assert 语句失败的时候,会引发一个AssertionError
repr 函数用来取得对象的规范字符串表示。注意,在大多数时候有eval(repr(object))== object,repr 函数用来获取对象的可打印的表示形式。你可以通过定义类的__repr__ 方法来控制你的对象在被repr 函数调用的时候返回的内容。
17.进一步
Jython用Java 语言实现的Python 解释器。这意味着你可以用Python 语言编写程序而同时使用Java 库!Jython 是一个稳定成熟的软件。如果你也是一个Java 程序员,我强烈建议你尝试一下Jython