贡献者: 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