查看“Python”的源代码
←
Python
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[Python2 vs Python3]] [[Python程序的调试]] [[ipython]] [[jupyter]] =容器= *container(数据结构) *有3种: 序列,映射,集合 ==序列(sequence)== *序列有6总(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象) *序列的索引从0开始,对序列分片时包括开头,不包括结尾,比如A[3:4]只包括A列表的第四个成员 *序列的加号操作,[1,2,3]+[4,5,6] = [1,2,3,4,5,6] *乘号参考加号 [1,2]*2 = [1,2,1,2] ===通用序列操作=== * 索引,分片(slice),加,乘,迭代,最大,最小,长度 * 索引从0开始,最后一个元素是-1(从右向左索引) *分片: 访问倒数3个 A[-3:],访问正数3个A[:3] :*步长为2访问 A[0:10:2],步长可以为负,从右向左。 *相加 [1,2]+[3,4]-->[1,2,3,4] *相乘 [1,2]*3 --> [1,2,1,2,1,2] :* A=[None]*10 生成长度为10的空的列表 *成员资格:in,布尔运算符 *len (长度),min,max *enumerate: 对一个列表或数组既要遍历索引又要遍历元素时 for index,text in enumerate(list): print index ,text ===列表=== * 列表的元素可以修改,字符串不能 :* x=[1,1,1],x[1]=2 :* del x[1] :* x[1:1]=[2,3,4] 分片赋值,注意这相当于插入 * 列表方法 :* append, count, extend, index, insert :* pop (删除指定位置元素,并返回该元素,同时修改列表),实现栈的功能,入栈(push),出栈(pop),Python里面没有push,用append功能实现 :* remove,reverse,sort (sort的用法要注意,参考书的39页),sorted ===元组=== *不可变序列 *(1,2,3) (1,) * 比如3*(40+2) 和3*(40+2,)的差别 * tuple函数:把列表转换为元组 * list: 把元祖装换为列表 * 元组貌似没有什么用处,列表基本满足所有需要 ===字典=== *字典用大括号生成,字典的元素是items,每个元素有keys,values :如果不定义keys,默认的keys就是index,那么字典的里面的values可以直接用index调用 dic={'a','b','c'} dic[2] * a,b 是两个数组,把 a和b映射起来变成一个字典 :dic=dict(zip(a,b)) * 如果对一个列表c,希望用dict来查值,并赋给另外一个列表d d=[dict(x) for x in a] * 下面的方法将用于合并两个字典。 def merge_two_dicts(a, b): c = a.copy() # make a copy of a c.update(b) # modify keys and values of a with the ones from b return c # 在 Python 3.5 或更高版本中,我们也可以用以下方式合并字典: def merge_dictionaries(a, b) return {**a, **b} *字典默认值通过 Key 取对应的 Value 值,可以通过以下方式设置默认值。如果 get() 方法没有设置默认值,那么如果遇到不存在的 Key,则会返回 None。 d = {'a': 1, 'b': 2} print(d.get('c', 3)) # 3 ===字符串=== *%s%d%f (字符串,整数,浮点数)[https://blog.csdn.net/qq_37482544/article/details/63720726] * join & split A=['1','2'] B='+'.join(A) C-B,split('+') ==集合== *无序不重复集 set [http://blog.csdn.net/business122/article/details/7541486] >>> a = [11,22,33,44,11,22] >>> b = set(a) >>> b set([33, 11, 44, 22]) >>> c = [i for i in b] #注意这个用法很方便 >>> c ==数组== *numpy中有个数组ndarray的数据结构 [http://blog.csdn.net/sunny2038/article/details/9002531] :array() 可以将列表等转化为数组 :asarray()和array差不多,但是不一定需要复制 *如何把两个数组合并为一个数组 :np.concatenate((a, b), axis=0) =控制语句= ==条件== *<expression1> if <condition> else <expression2> :如果为真 执行 expression1,否则执行 expression2 ==异常== try: x=input('enter the value of x') y=1/x except: print(error) else: print(1/x) finally: print('whatever x, I do not care') =函数、类、模块= *函数以 def(): 来定义 *类以 class(): 来定义 *一般一个模块指一个同名文件(文件中有一般有一个__init__()函数),或者同名文件夹(文件夹下有一个__init__.py) :* import一个文件中的某个函数,或者类, from modular import sth :* import一个文件夹中的某个文件: from modular import file :* import一个文件夹中的某个文件中的某个函数或者类: from modular.file imprt sth *只有某个文件对应的模块可以被reload(文件修改之后需要重新加载) :先import 某个模块,然后才可以reload ==函数== *函数的输出用returm *lambda 函数 >>> g = lambda x:x+1 看一下执行的结果: >>>g(1) >>>2 可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体:f(x)=x+1 参见http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html ===参数=== *参见 [https://www.jianshu.com/p/98f7e34845b5] *五种参数 这五种参数可以组合使用,但参数定义的顺序必须是:位置参数-->默认参数-->可变参数-->命名关键字参数-->关键字参数 *位置参数 *默认参数 :重点:默认参数必须指向不变对象 *可变参数 def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum :可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple >>> nums = [1, 2, 3] >>> calc(*nums) : 实参里调用*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。 *关键字参数 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) :关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。 >>> extra = {'city': 'Beijing', 'job': 'Engineer'} >>> person('Jack', 24, **extra) : 实参中的**extra用法表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。 *命名关键字参数(这个我比较喜欢) 如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下: def person(name, age, *, city, job): print(name, age, city, job) :和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符,后面的参数被视为命名关键字参数。 :命名关键字参数可以设定默认值,但是不能不给,可能这是和默认参数的区别 ===函数名=== *是否可以用变量做为函数名?参见 [pythontab.com/html/2013/pythonhexinbiancheng_0813/540.html] ==类== *类的实例的保存和载入,pickle output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) output.close() pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pkl_file.close() ===内部变量,魔方方法=== *__file__ :查找源文件位置 print(ppxf.__file__) *__name__,__main__ :if __name__ == '__main__': test() *__init__ (初始化方法 ) :def __init__(self) *__all__ (显示可见功能) :copy.__all__ *__doc__ (文档) :print(copy.copy.__doc__) [[脚本和模块]] =画图= *参见[[Matplotlib]] *交互式,数据可视化Bokeh *还有spotify下的Charitfy(基于Bokeh) =输入输出= ==格式== *print("%10.3f"% (356.08977)) *在输出ndarray的时候,设置输出的数的精度 :np.set_printoptions(precision=2) ==文件输入== ===ascii 文件=== *[[pandas]] 中的read_table *[[numpy]]中的genfromtext :ppxf 中根据该程序写了一个接口程序 readcol ==文件输出== f = open("chain.dat", "w") k=1000 l=10 s='line' *格式输出 f.write("{0:4d} {1:d}\n".format(k,l)) #str.format 用法 0是第一个参数,1是第二个参数,:后面是格式, write只能是字符串 f.write('line 1: {:0>3d},{:.2f}'.format(a,b)+'\n') #0表示左边补0, >表示右对齐,3表示宽为3个字符 f.write("line 1:%3d %4.2f" %(a,b)) #C语言格式,感觉更友好 *默认格式输出 data=[s,k,l] f.write(','.join([str(i) for i in data])+'\n') print(s.k,l,file=f) *关闭文件 f.close() ===表格输出=== table={'XCENTER': [0.2, 0.44]} ascii.write(table, formats={'XCENTER': '%12.5f'}) =Packages= *glob 查找文件位置 *os 系统的一些变量 :dir=os.getenv('bc03_dir') :os.getcwd() #获取当前目录的绝对路径 *[[astropy]] *[[scipy]] *[[numpy]] *[[pandas]] *命令行解析工具 Argparse [https://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.html] *消光:sfdmap and extinction :https://github.com/kbarbary/sfdmap *healpy =链接= *带下划线变量的意义 [http://www.cnblogs.com/elie/p/5902995.html]
返回至“
Python
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
社群首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息