解释型语言,不用编译
内置模块、第三方库、自定义模块和库
不需要预定义变量或参数
代码块:缩进划分,而不是花括号
命令行传入参数,解释器读取转化为字符串列表存入sys模块的argv变量中
交互模式:>>> ...
编码:UTF-8
声明编码:-*- coding:utf-8 -*-
int,float,复数(4+5j)
+,-,*,/,//,%,**
除法运算 -> float
混合数字类型运算 -> float
NameError:变量未定义(未赋值)
s = "0123456789"
加法/连接:str+str->str
乘法/连接:str*int->str
索引(下标访问):s[index]
切片:s[start:end:step]
IndexError : 索引异常
内建函数:len() -> int
①str is sequence;②str method;③str format
组合一些值得到 复合 数据类型。
list,str,tuple 序列对象支持加法连接,乘法连接。索引,切片操作
①str is immutable;② list is mutable
def fib(n): # def 标记一个函数定义。并将 fib 指向函数对象。引用+1
"""Print a Fibonacci result.""" # doc
a, b = 0, 1
while a < n:
print(a, end=‘ ‘)
a, b = b, a+b
print()
m = 2000
fib(m) # argument:m。parametrise:n。
# n 指向 传入函数的对象。(传入的是m指向/引用的2000这个对象)
函数定义形参
*args,**kwargs,*
。可变参数后定义的参数只能用关键字传参函数调用传参
in关键字:检查一个sequence是否包含某个值
lambda表达式
? lambda param1,param2: <express>
list().append()
list().extend(iterable)
list().insert(i,v)
list().remove()
list().pop([i])
list().clean()
list().index()
list().count(x)
list().sort()
list().reverse()
list().copy()
# 列表作为栈:append+pop
# 列表作为队列:collections.deque:append,queue.popleft
# 列表推导式
li_one = [<express> for param in iter()]
li_two = list(map(lambda x: x**2, range(10)))
# 嵌套列表推导式
li_three = [num for elem in vec for num in elem]
str,list,tuple都是sequence数据类型。支持切片和索引。
tuple is mutable
set(sequence)
&,|,^,-
列表推导式
映射类型,关键字为索引。
关键字必须是不可变类型。通常为str,number。或只有一个str或number元素的tuple
# 定义dict
d_one = {}
# 给dict添加元素/成员
d[key] = value
# 获取dict的成员
t = d[key]
# 删除dict的成员
del d[key]
# 修改dict的成员(重新赋值)
d[key] = value
# 检查成员
‘key‘ in d
# 获取dict的keys
d.keys() -> iter()
# 获取dict的key和value
d.items() -> iter()
# dict()
dict([(key, value), (key, value), ...])
# 列表推导式
{x: x*2 for i in range(10)}
import module # modue 添加到当前模块的命名空间
from module improt func # func 添加到当前模块的命名空间,module不会添加到命名空间
# 模块搜索路径
# ①内置模块中查找;②sys.path变量给出的目录列表中寻找
# 绝对路径和相对路径导入
名称和对象
作用域和命名空间
三个命名空间可被直接访问
类的两种操作
__init__
方法初始化实例空间实例对象
一个类中所有是函数属性都定义了其实例的相应方法
class Person:
def pri(self):
print(‘def pri self!‘)
Person.pri -> function
Person().pri -> method
# 这两个pri引用并不是一回事。
# Person.pri中。pri是一个函数对象
# Person().pri中。pri是一个方法对象。
通常方法对象在绑定后被立即调用。也可以使用变量引用后再调用。
方法和函数的区别:方法会自动将点号前面的实例对象作为方法的第一个参数传入。
共享数据在涉及mutable对象时,会导致意料之外的结果。
数据属性会覆盖掉具有相同名称的方法属性。
# 类函数形式调用
Person.pri(Person())
# 实例方法形式调用
Person().pri()
类的属性和函数
类的实例函数会定义在特殊的空间中供实例方法调用,类的静态函数和类函数和属性函数会定义在namespace中,类和示例都可以调用。
类的类属性定义在类的namespace中,实例的属性定义在init或实例方法中,实例化时,会把init中的实例属性,类的类属性,property属性添加到实例的namespace中。
顺序
类执行顺序:在执行代码的过程中遇到class,会执行类定义代码块,并生成持久的namespace,保持状态。
函数执行顺序:在执行代码的过程中遇到def,会将其添加到namespace并不会执行def内部语句。只有在调用时才会执行,并且在执行结束时,清除函数内处理return对象之外的所有引用。
迭代器
__iter__和__next__方法的对象。
可以使用next(obj)迭代出下一个对象def + yield -> generate
可迭代
例外:模块有一个只读属性__dict__
,返回用于实现模块命名空间的字典,__dict__
是属性但不是全局名称。变量空间只是def,class,module对象的一个属性。里面存放着在对象代码块中的新变量和值
# 导入模块,而不是导入函数。避免函数名称覆盖
import os # 操作系统接口
os.getcwd()
os.chdir()
os.system()
import shutil # 文件和目录管理
shutil.copyfile()
shutil.move()
import glob # 文件通配符
glob.glob()
import sys # 命令行参数
sys.argv
import re # 字符串模式匹配
import math # 数学
import random # 随机选择
import urllib # url检索
import smtplib # 发送邮件
import timedate # 日期和时间
import zlib # 数据压缩
import doctest # 文档测试
import unitest # 单元测试
from array import array
from collections import deque
数据类型
基本数据类型:int,float,str,bool,None
容器数据类型:list,tuple,set,dict
其它:list -> stack,queue,array
不可变:int,float,str,bool,tuple,None
可变:list,set,dict -> 浅复制和深复制
序列(连续地址):str,list,tuple。加,乘,索引,切片。
映射:dict,enumerate
可迭代:① sequence,set,dict。② 定义iter和next方法的类。③ 生成器。⑥ range()->for
运算
attribute和variables
流程
模块/库
原文:https://www.cnblogs.com/bonus_scene/p/13688645.html