• Python学习(一)基础知识


    参考资料:https://github.com/lijin-THU/notes-python(相应实体书为:《自学Python——编程基础、科学计算及数据分析》)

     

    1. Python之禅:import this

     Python的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:import keyword + keyword.kwlist

    2. iPython使用

    • %lsmagic  //查看所有magic命令;line magic % 作用于一行,cell magic %% 作用于整个cell
    • %pylab  //导入numpy和matplotlib两个包
    • %matplotlib inline  //页面内嵌画图,非弹窗 + import matplotlib + import matplotlib.pyplot as plt
    • ?  //使用 ? 查看函数的帮助,如sum?
    • ??  //使用 ?? 查看函数帮助和函数源代码,sum??
    • !ping baidu.com  //使用 ! 来执行一些系统命令
    • _  // _ 上个cell的输出结果
    • %run、%timeit、%%writefile、%precision

    3. Python支持链式比较:x = 2; 1 < x <= 3  输出True

    4. list.append():每次只添加一个元素,并不会因为这个元素是序列而将其展开(不展开

    5. list.extend(lst):将序列lst的元素依次添加到列表list的最后,相当于list += lst

    6. 数据类型

    • 不可变类型:基本类型(整型、长整型、浮点数等)+ 复数 + 元组 + 字符串 +不可变集合(frozen set)
    • 可变类型:列表 + 字典 + 集合 + numpy数组 + 用户自定义类型;

    7. 赋值机制(02.13 how-python-assignment-works

    (1)对于简单类型而言,python会为每个出现的对象进行赋值(分配内存),哪怕它们的值是一样的;不过,为了提高内存利用效率,对于一些简单的对象,如一些数值较小的int对象,python采用了重用对象内存的办法;  //可以使用 id() 函数查看内存地址,如id(x)返回变量x的内存地址;或者使用 is 来判断是不是指向同一个事物(内存地址),如 x is y 返回True或False

    (2)对于容器类型而言,python给新对象赋值时,仅仅是指向同一块内存空间(不分配新内存),如 x = [500, 501, 502]; y = x;  //改变列表数据时,会分配新的内存空间给新值,而旧值则会python自动调用垃圾处理机制回收

    8. 生成随机数函数:range(), xrange()  //xrange效果与range函数相同,但是xrange并不会一次性的产生所有的数据,可以节省时间和内存消耗

    • %timeit for i in xrange(1000000): i = i  //运行时间较快
    • %timeit for i in range(1000000): i = i  //运行时间较慢,一次性产生所有数据

    9. 列表推导式 x = range(1000000)

    • %timeit total = sum([i**2 for i in x])  //运行时间较慢,python会一次性生成整个临时列表,再进行求和,临时列表会被垃圾回收机制回收
    • %timeit total = sum(i**2 for i in x)  //运行时间较快,类似上述xrange()

    10. map方法生成序列:map(aFun, aSeq)  //将函数 aFun 应用到序列 aSeq 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型

    1 def sqr(x): 
    2     return x ** 2
    3 
    4 a = [2, 3, 4]
    5 print map(sqr, a)
    输出:[4 9 6]

    注:根据函数参数的多少,map 可以接受多组序列,将其对应的元素作为参数传入函数

    1 def add(x, y): 
    2     return x + y
    3 
    4 a = (2, 3, 4)
    5 b = [10, 5, 3]
    6 print map(add, a, b)
    输出:[12 8 7]

    11. 函数通过元组和字典传入参数  //结合可变参数的函数定义方式进行思考def func(arg1, *arg2, **arg3):  位置参数在前,键值对参数在后

    1 def add(x, y):
    2     """Add two numbers"""
    3     a = x + y
    4     return a
    5     
    6 z = (2, 3)
    7 print add(*z)  #传入元组参数z,其中 * 必不可少
    输出:5
    1 def add(x, y):
    2     """Add two numbers"""
    3     a = x + y
    4     return a
    5 
    6 w = {'x': 2, 'y': 3}
    7 print add(**w)  #传入字典参数w,其中 ** 必不可少
    输出:5

    12. 模块

    • import:载入模块,在导入时,python会执行一遍模块中的所有内容,包括输出语句print

      注:为了提高效率,python只会载入模块一次,已经载入的模块再次载入时,Python并不会真正执行载入操作,哪怕模块的内容已经改变

    • reload()函数:强制重新载入模块 reload(module);Python 3把 reload 内置函数移到了 imp 标准库模块中,必须先导入 from imp import reload
     #利用__name__属性,使得.py文件既能当作脚本,又能当作模块用
    1
    PI = 3.1416 2 3 def sum(lst): 4 """ Sum the values in a list 5 """ 6 tot = 0 7 for value in lst: 8 tot = tot + value 9 return tot 10 11 def add(x, y): 12 " Add two values." 13 a = x + y 14 return a 15 16 def test(): 17 w = [0,1,2,3] 18 assert(sum(w) == 6) 19 print 'test passed.' 20 21 if __name__ == '__main__':  #当文件被当作脚本执行时,__name__的值为"__main__",会执行test()函数,当做模块导入是,test()不执行 22 test()

    13. 常用的标准库

    • re 正则表达式
    • copy 复制
    • math, cmath 数学
    • decimal, fraction
    • sqlite3 数据库
    • os, os.path 文件系统
    • gzip, bz2, zipfile, tarfile 压缩文件
    • csv, netrc 各种文件格式
    • xml
    • htmllib
    • ftplib, socket
    • cmd 命令行
    • pdb
    • profile, cProfile, timeit
    • collections, heapq, bisect 数据结构
    • mmap
    • threading, Queue 并行
    • multiprocessing
    • subprocess
    • pickle, cPickle
    • struct

    14. 警告warnings:出现了一些需要让用户知道的问题,但又不想停止程序,可以使用警告

    1 import warnings
    2 
    3 def month_warning(m):
    4     if not 1<= m <= 12:
    5         msg = "month (%d) is not between 1 and 12" % m
    6         warnings.warn(msg, RuntimeWarning)  #警告函数
    7 
    8 month_warning(13)
    输出:RuntimeWarning: month (13) is not between 1 and 12
    #设置忽略特定类型的警告
    1
    warnings.filterwarnings(action = 'ignore', category = RuntimeWarning) 2 3 month_warning(13)  #没有警告出现
  • 相关阅读:
    localtime 和 localtime_r 的区别
    mysql1130远程连接没有权限的解决方法
    pthread_create
    GDB Core,gdb 调试大全,core文件调试
    非root用户 如何将cscope安装到指定目录,vim74安装
    linux查看网络链接状况命令netstat
    在Linux系统如何让程序开机时自动启动
    Linux开机启动程序详解
    u盘出现大文件无法复制的解决
    用JSON报的一个错误java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeExcep
  • 原文地址:https://www.cnblogs.com/hg-love-dfc/p/10271571.html
Copyright © 2020-2023  润新知