贡献者: addis; _Eden_
# 号进行注释
\ 把一行长代码转移到下一行. (相当于 Matlab 里面的省略号)。许多地方可以省略 \ 例如 ,, +,- 等运算符后面。连续两行双引号字符串也会自动连到一起无需 \。
a,b,c=1,2,3。这其实是 tuple 赋值,即 (a,b,c)=(1,2,3)。等号右边也可以是一个 list。
x = y = z = "Orange"
MyFun()
locals() 和 globals() 查看所有变量
if 'a' in locals() 用于查询变量 a 是否存在
_ 中
import sys,可以获得命令行的 arguments 数组(list of string),sys.argv[0] 是调用程序的命令,剩下的是跟随的 arguments
from math import * 用这个格式可以在代码中直接输入 math 包里面的函数名, sin, cos, 而不用 math.sin
print() 相当于 Matlab 的 disp(), print(string,end=' ') 可在输出后面用空格隔离, 默认为回车.
type() 可以检查任意变量的类型
type, 例如 float, bool, int 等.
int(),float() 等等
float 就是 C 的双精度 double, 有 16 位有效数字
int 类型可以储存任意位数的整数, 不会溢出
1+2j 或者 1+2J 表示复数,不能用 i
global 变量1, 变量2 可以声明需要修改的全局变量,也就是函数外定义的变量。如果只用于读取则无需声明
'...' 和 "..." 都是字符串,只是里面对 ' 和 " 的转义不同。
+ 合并两个字符串。
r'...',r"...",r"""...""" 可以把字符串原样输出,不做任何转义。r"""...""" 内支持换行。
a='word'; 也可以 a="""word""" 后者可以输入多行字符
str*10, 就是 'strstrstrstrstrstrstrstrstrstr'.
str(a) 可以把其他类型变为字符串
sep='00'; sep.join(['1','2','3']) 可以生成 '1002003'
str.find('key', ind) 可以从某个位置开始搜索下一个 key。搜不到返回 -1。例如 str[:str.find('.')] 可以获取句号之前的内容。
str.replace('key', 'new_key') 把所有的 key 替换成 new_key 并输出。str 本身不会被改变。
True 和 False, 注意大写
and, 或是 or, 非是 not, 异或是 ^
NoneType, 当函数没有输出的时候返回.
** 不是 ^ !!
3/4=0, 因为 int 相除输出 int, 向下取整. 这时把任意一个转换成 float 即可. 3.0/4=0.75
//,总是向负无穷取整(C 语言向 0 取整)。如果其中一个参数是浮点数,那么结果也会是浮点数。如果两边都是整数输出才是整数。
%
if <条件语句> :
if a in 容器: 判断元素是否在容器中。一定记住加冒号!
if not a in 容器: 也可以写成 if a not in 容器:
elseif 要写成 elif
if 后面加非零整数是 false,加零是 true,单元素的空 list 是 false,否则是 true
while a > b :
for i in range(inta, intb):,注意 i 最大值是 intb-1
i 仍然有定义,值为最后一次循环中的值。
for i in range(0,5): 或 for i in range(5): 和 for i in [0,1,2,3,4]: 等效
range(inta,intb) 实际上不是数组,输出的数据类型叫做 range.
for i, arg in enumerate(容器): ... 可以在遍历容器的同时添加一个计数变量 i。也可以用 enumerate(容器, start=N) 指定第一个循环中的计数
for key in 字典: ... 可以只遍历 key,for key,val in 字典.values(): ... 可以遍历值,for key,val in 字典.items(): ... 可以遍历 (key, val)。
break 跳出任意循环 (for/while), continue 跳到下一个循环。
pass 是一个用来填充格式的语句, 不做任何事情, 可以放在循环中或函数定义中。
for 或 while 下面可以加上一个 else, 如果循环没有被 break 打断, 则会执行 else。
range() 函数可以有 1 到 3 个变量, range(n) 相当于 [0, … , n-1], range(n1,n2,step) 相当于 [n1, …, n2-1] 步长为 step
for ... else ... 结构中,如果循环中没有出发 break,else 就会被执行。
i:j 实际表示从 i 到 j-1 的元素, 另外和 C 语言一样, 数组 index 都是从 0 开始的
a=[1,2,3,4], b=[[1,2],[3,4,[7,8],5],[6]], 可以任意数量任意嵌套.
a = [x*2 for x in range(0,3)] 的结果是 a = [0,2,4]
a = [[ii+jj for ii in range(0,3)] for jj in range(0,3)] 的结果是 a = [[0,1,2],[1,2,3],[2,3,4]]
len() 获取数组最外层长度
[*[1,2],3,*[4,5,6]]=[1,2,3,4,5,6]
a[ind1:ind2] 超出范围时并不会出错。
a = [[0,1,2],[1,2,3],[2,3,4]],a[i][j] 索引数组中的元素,也可以用 a[:,0:1] 提取第 0 到第 1 列的所有元素。
B = A 复制数组,python 会把用两个变量名视为等效,数组还是同一个。
B = A.copy(),B = A[:],或者 B = list(A)
a == b 判断它们的值是否相等,a is b 判断它们是否指向同一个对象
list 或者 nparray 在函数中如果给自变量元素进行赋值,那么函数结束以后自变量也会改变!python 这是什么鬼啊!所以在函数中千万不要变动原数组,除非在函数外也不需要了。
listA + listB 操作合并两个 list。list.append() 可以把输入的东西变成一个元素加入到 list 最后。list.reverse() 可以颠倒 list 的顺序。
listA.append(listB)
dict={"a":"b", "c":"d", "e":"f"}
my_set = {"a", b, 2}。空集用 my_set = set()
my_set.add(元素) 可以添加元素,my_set.remove(元素) 删除元素
if key in 容器: 可以用于检查 key 是否在容器中,几乎所有容器都适用
f = lambda x, y: a*(x**2+y**2) 相当于 Matlab 中的 f=@(x,y) a*(x^2+y^2)
a, 那么再次调用 lambda 时 a 会更新.
def FunctionName(a,b,c):
""" 函数的描述, 会出现在documentation中 (详见P25)
三个引号可以占用多行 """
...
...
return d,e,f,g
函数中任何 return 都会跳出函数.
d,e,f,g=FunctionName(a,b,c)
d,e,f,g=Function Name(b=1,a=2,c=3) 这样可以不按顺序输入
func(*list) 可以把 list 中的变量按顺序输给 function 做自变量.
function, 可以把函数名赋值给另一个变量.
builtin_function_or_method
def func(a,b=1,c='str'): 调用时必须按顺序输入
*name, **name. 定义函数时用 *name 可以接受任意数量的 positional argument, **name 可以接受任意数量的 keyword argument.
dir() 可以获取当前的所有对象
os.system('clear') 或 Windows 中 os.system('cls') 可以清空 REPL
with 需要某个对象定义了析构函数:
class MyResource:
def __enter__(self):
print("Resource acquired")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Resource released")
# Using the custom context manager
# resource 是 MyResource() 返回的对象
# MyResource() 也可以是一个普通函数
with MyResource() as resource:
print("Inside the block")
输出:
Resource acquired
Inside the block
Resource released
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利