Python是胶水语言(很容易和其他程序语言连接,集成封装),是高级脚本语言(比其他脚本语言只能处理简单任务强大),是面向对象语言(完全支持继承、重载、派生、多继承)。 Python是动态强类型语言。所谓的动态是指Python中的变量可以指向不同类型的对象,无需事先声明。强类型可以这样理解,在 Python 中 1 + 'A'是不允许的,两者类型必须一致,而在 C 语言中这个表达式 是将 1 和字符 A 的 ASCII 值 65 相加,结果是 66,因此 Python 是强类型。 Python中的eval()函数:将字符串str当成有效的表达式来求值并返回计算结果。
续行符:“\” 无需续行符可直接换行的两种情况:
- 小括号、中括号、花括号的内部可以多行书写
- 三引号包括下的字符串也可以跨行书写
Python可以一行多语句书写,此时用**;**隔开,如下
x = 'Today' ; y = 'is' ; z = 'Thursday' ; print(x, y, z)Python中通过以下语句可以得到关键字:
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']Python支持链式赋值:
PI = pi = 3.14159
Python支持多重赋值:
PI, r=3.14159, 3 等同于(PI, r) = (3.14159, 3)
Python的复数型的虚数部分必须有j 求虚部、实部、共轭如下:
x = 2.4+5.6j
x.imag
x.real
x.conjugate()- 数值的比较:按值的大小
- 字符串的比较:按ASCII码值的大小
每个对象被创建时都会获得一个身份 id,可用 id()函数查看,同时会伴随一个引用计数器。 id() 函数用于获取对象的内存地址。如果两个变量a,b通过id()函数获取的内存地址相同,那么a is b返回True,否则返回False。 在 Python 中存在特殊的地方,小整数(并无确切范围)和字符串是不可变的,Python 会采用高效的方式去存储
Python中的内建函数:
dir(__builtins__)
['ArithmeticError', ...... , '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']数值型内建函数:
abs(): 求绝对值
bool(): 求布尔值
bin(x): 求x对应的二进制
>>> bin(9)
'0b1001'
oct(x):求x对应的八进制
>>> oct(9)
'0o11'
hex(x): 求x对应的十六进制
>>> hex(17)
'0x11'
round(x): 对x四舍五入
int(x): 对x截断取整
float(x): 将x变为float类型
complex(num):将num变为complex复数型
divmod(a,b): 求a//b和a%b的值
pow(a,b): 求a**b(a的b次方)
ord(): 求对应的ASCII的值
>>> ord('A')
65
chr():求该数值在ASCII表中对应的符号
>>> chr(89)
'Y'可能用到的非内建函数:
import math
math.floor(x) #向下取整
math.ceil(x) #向上取整
math.degrees() #将弧度转为角度
math.radians() #将角度转为弧度
>>> math.degrees(3.14)
179.9087476710785
>>> math.radians(180)
3.141592653589793
>>> [i+1 for i in range(10) if i%2==0]
[1, 3, 5, 7, 9]
>>> (i+1 for i in range(10) if i%2==0)
<generator object <genexpr> at 0x10bbd1938>生成器表达式与列表解析式类似,不过采用圆括号标识,一般用在数据量比较大时使用。
循环中的else:
- 如果循环代码从break处终止,跳出循环,则不执行循环后边的else语句
- 正常结束循环,则执行else中代码
>>> import os
>>> os.getcwd()
'/Users/yanmk/学习/技术学习/Python/Python_NJU'
>>> os.chdir('/Users/yanmk/学习')
>>> os.getcwd()
'/Users/yanmk/学习'
>>> os.rename(current_file_name, new_file_name)
>>> os.remove(file_name)
>>> os.mkdir(newdir)
>>> os.rmdir(dirname) #此目录为空时,否则抛出OSError>>> import random
>>> random.choice(['C++', 'Java', 'Python']) #随机从列表中选一个
>>> random.randint(1, 100) #[1,100]范围内随机选一个
>>> random.randrange(0, 10, 2) #[start,step=2,end)范围内选一个
>>> random.random() #[0,1)范围随机数
>>> random.uniform(5, 10)
>>> random.sample(range(100), 10) #在0-99范围内随机采样10个数字组成列表
>>> random.shuffle(list) #随机打乱列表>>> import datetime
>>> from datetime import date
>>> date.today()
datetime.date(2018, 11, 7)
>>> from datetime import time
>>> tm=time(23, 20, 35)
>>> print(tm)
23:20:35
>>> type(tm)
<class 'datetime.time'>
>>> from datetime import datetime
>>> dt=datetime.now()
>>> print(dt)
2018-11-07 20:33:10.454317
>>> print(dt.strftime('%a, %b %d %Y %H:%M'))
Wed, Nov 07 2018 20:33
>>> dt = datetime(2018, 2, 3, 23, 29)
>>> print(dt)
2018-02-03 23:29:00
>>> ts=dt.timestamp()
>>> print(ts)
1517671740.0
>>> print(datetime.fromtimestamp(ts))
2018-02-03 23:29:00strftime:全称 string format time,用字符串的形式来格式化时间,重点在format,格式化,使之以一种可读的字符串形式返回。
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2018 11-14 19:50:52'strptime:全称 string parse time,将字符串解析为时间,重点在parse。
from datetime import datetime
datetime.strptime('2018-11-14 19:50:00','%Y-%m-%d %H:%M:%S')
datetime.datetime(2018, 11, 14, 19, 50)更多datetime模块相关的信息,参见(http://www.runoob.com/python3/python3-date-time.html)
>>> print('There are %d punctuation marks. ' % (2))
There are 2 punctuation marks.
>>> print('There are {0:d} punctuation marks. '.format(2))
There are 2 punctuation marks. 以上两种方式都可以格式化字符串,但是更推荐使用第二种format形式,更多format信息参见(http://www.runoob.com/python/att-string-format.html)
file_obj = open(filename, mode='r', buffering=-1, …)
- mode为可选参数,默认值为r
- buffering也为可选参数,默认值为-1,使用系统默认的缓冲区大小(0代表不缓冲,1 或大于1的值表示缓冲一行或指定缓冲区大小)
- mode为w时,会清空原内容再写
- 推荐使用with open(file_name, 'w') as f,可以进行上下文管理(结束后自动关闭文件)、异常处理。
file_obj.seek(offset , whence=0)
- 在文件中移动文件指针,从 whence(0表示文件头部,1表示当前位置,2表示文件尾部)偏移offset个字节
- whence参数可选,默认值为0
Python的pandas库中的DataFrame数据结构:
- loc: 通过行标签索引行数据
- iloc:通过行号索引行数据
- ix:混合以上两种方式,官方已经不推荐使用
上述章节主要讲述了Python中的数据结构:list、tuple、set、dict Numpy库、Pandas库(Series和DataFrame)、Matplotlib库、Scipy库。
Python的GUI库:
- wxPython:具有优秀的跨平台能力
- PyQt:优点:提供了GPL与商业协议两种授权方式,可以免费地用于自由软件的开发;跨平台;文档比其他GUI库丰富;与Qt、C++开发经验互通;可使用大多数为Qt开发的组件;更适合专业人士;缺点:要注意避免内存泄露;运行时庞大。
- Tkinter:优点:Python事实上的标准GUI,创建的GUI简单,学起来和用起来也简单;缺点:性能不太好,执行速度慢。
- PyGTK:优点:底层的GTK+提供了各式 的可视元素和功能;能开发在GNOME桌面系 统运行的功能完整的软件;缺点:在Windows平台表现不太好
