基础知识

Python中一切都是对象

元组中只有一个元素的话,后面的逗号不能省略

编程单元

函数(使用def定义)、类(使用class定义)、模块(类型为module)

类和函数都属于可调用对象,模块用来集中存放函数、类、常量或其他对象

定义函数

Python 定义函数使用def关键字,一般格式如下:

1

2

def 函数名(参数列表):

函数体

>>> def add5(v):                                #单参数函数

return v+5 >>> def add(x, y):                                            #可以接收2个参数的函数

return x+y

type(x)                 #查看变量类型

isinstance(3, int)                #测试对象是否是某个类型的实例

字符串和元组属于不可变序列,不能通过下标的方式来修改其中的元素值

Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。

显式使用del命令删除不需要的值或显式关闭不再需要访问的资源,仍是一个好的习惯,同时也是一个优秀程序员的基本素养之一。

八进制整数必须以0o开头,如0o35、0o11

二进制整数必须以0b开头如,0b101、0b100

单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串

三引号'''或"""表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。

字符串格式化   eg:          """My name is %s, and my age is %d""" % ('Dong Fuguo',39)

输出:             'My name is Dong Fuguo, and my age is 39'

以字母r或R引导的表示原始字符串print中使用

Python运算符与功能(摘)

/

真除法

//

求整商,但如果操作数中有实数的话,结果为实数形式的整数

**

幂运算

、>=、==、!=

(值)大小比较,集合的包含关系比较

比较字符串

比较列表

in

成员测试

is

对象同一性测试,即测试是否为同一个对象或内存地址是否相同

&、|、^

集合交集、并集、对称差集

True和False

>>> True + 3                        #Python内部把True当作1处理4 >>> False + 3                      #把False当作0处理3

%运算符除去可以用于字符串格式化之外,还可以对整数和浮点数计算余数

逻辑运算符and和or具有惰性求值 即短路

‘,’运算符

>>> 'a' in 'b', 'a' (False, 'a') >>> 3 == 3, 5 (True, 5)

input输入时作为字符串输入

内置函数不需要导入任何模块即可使用 执行下面的命令可以列出所有内置函数

>>> dir(__builtins__)

range用法

range([start,] end [, step] )

返回range对象,其中包含左闭右开区间[start,end)内以step为步长的整数

dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作。

ord()和chr()是一对功能相反的函数,ord()用来返回单个字符的序数或Unicode码,而chr()则用来返回某序数对应的字符。

经过处理后的得到的可迭代对象,需要接收

标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值。

>>> from functools import reduce >>> seq = list(range(1, 10))
>>> reduce(lambda x, y: x+y, seq) >>>45

内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。

>>> seq = ['foo', 'x41', '?!', '***']
>>> def func(x): return x.isalnum()                     #测试是否为字母或数字
>>> filter(func, seq)                                #返回filter对象
 >>> list(filter(func, seq))                          #把filter对象转换为列表['foo', 'x41']

zip()函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样。

>>> list(zip('abcd', [1, 2, 3]))                  #压缩字符串和列表[('a', 1), ('b', 2), ('c', 3)]
>>> list(zip('123', 'abc', ',.!'))                  #压缩3个序列[('1', 'a', ','), ('2', 'b', '.'), ('3', 'c', '!')]
>>> x = zip('abcd', '1234')
>>> list(x) [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')] #可实现字典的合成

在Python 3.x中,为了实现上述功能则需要使用下面的方法:

>>> for i in range(10,20):
print(i, end=' ')
10 11 12 13 14 15 16 17 18 19

Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip是管理模块的重要工具。可以使用dir函数查看任意模块中所有的对象列表,如果调用不带参数的dir()函数,则返回当前所有名字列表。

random使用
>>>import random
>>>n=random.randint(1,100)   #获得[1,100]上的随机整数
from 模块名import对象名[ as别名] #可以减少查询次数,提高执行速度
from math import *    #谨慎使用
>>> from math import sin
>>> sin(3) 0.1411200080598672
>>> from math import sin as f #别名
>>> f(3) 0.141120008059867

☐ Python代码规范

缩进

类定义、函数定义、选择结构、循环结构,行尾的冒号表示缩进的开始

python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。

同一个级别的代码块的缩进量必须相同。

一般而言,以4个空格为基本缩进单位

注释

常用的注释方式主要有两种:

以#开始,表示本行#之后的内容为注释

包含在一对三引号'''...'''或"""..."""之间且不属于任何语句的内容将被解释器认为是注释

每个import只导入一个模块

如果一行语句太长,可以在行尾加上\来换行分成多行,但是更建议使用括号来包含多行内容。

必要的空格与空行

运算符两侧、函数参数之间、逗号两侧建议使用空格分开。

不同功能的代码块之间、不同的函数定义之间建议增加一个空行以增加可读性。

适当使用异常处理结构进行容错,后面将详细讲解。

软件应具有较强的可测试性,测试与开发齐头并进。

☐ Python文件名

.py:Python源文件,由Python解释器负责解释执行。

.pyw:Python源文件,常用于图形界面程序文件。

.pyc:Python字节码文件,无法使用文本编辑器直接查看该类型文件内容,可用于隐藏Python源代码和提高运行速度。对于Python模块,第一次被导入时将被编译成字节码的形式,并在以后再次导入时优先使用“.pyc”文件,以提高模块的加载和运行速度。对于非模块文件,直接执行时并不生成“.pyc”文件,但可以使用py_compile模块的compile()函数进行编译以提高加载和运行速度。另外,Python还提供了compileall模块,其中包含compile_dir()、compile_file()和compile_path()等方法,用来支持批量Python源程序文件的编译。

.pyo:优化的Python字节码文件,同样无法使用文本编辑器直接查看其内容。可以使用“python –O -m py_compile file.py”或“python –OO -m py_compile file.py”进行优化编译。Python 3.5不再支持.pyo文件。

.pyd:一般是由其他语言编写并编译的二进制文件,常用于实现某些软件工具的Python编程接口插件或Python动态链接库。

☐ Python脚本的“__name__”属性

每个Python脚本在运行时都有一个“__name__”属性。如果脚本作为模块被导入,则其“__name__”属性的值被自动设置为模块名;如果脚本独立运行,则其“__name__”属性值被自动设置为“__main__”。例如,假设文件nametest.py中只包含下面一行代码:

print(__name__)

在IDLE中直接运行该程序时,或者在命令行提示符环境中运行该程序文件时,运行结果如下:

__main__

而将该文件作为模块导入时得到如下执行结果:

>>> import nametest nametest

利用“__name__”属性即可控制Python程序的运行方式。例如,编写一个包含大量可被其他程序利用的函数的模块,而不希望该模块可以直接运行,则可以在程序文件中添加以下代码:

if __name__ == '__main__':    print('Please use me as a module.')

这样一来,程序直接执行时将会得到提示“Please use me as a module.”,而使用import语句将其 作为模块导入后可以使用其中的类、方法、常量或其他成员。

☐ 编写自己的包与模块

在包的每个目录中都必须包含一个__init__.py文件,该文件可以是一个空文件,仅用于表示该目录是一个包。

__init__.py文件的主要用途是设置__all__变量以及所包含的包初始化所需的代码。其中__all__变量中定义的对象可以在使用from …import *时全部正确导入。

☐ Python快速入门(待加入)

本来是在有道笔记上写的但是格式转到这里后就不太好了,以后尽量在这里写;

如果能帮到别人,会很高兴,如果觉得写得太糟糕了,那我就当做自己的笔记吧;

这是我的第一篇博客;

如果觉得还能看的话,但是觉得格式太糟糕的话,可以看我的有道笔记:

文档:第一章 基础知识.note