Python-modules-packages

列表推导式

# 循环可以用来生成列表
values =  [10, 21, 4, 7, 12]
squares = []
for x in values:
    squares.append(x**2)
print squares

# 列表推导式可以使用更简单的方法来创建这个列表
values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values]
print squares

# 例如在上面的例子中, 假如想要保留列表中不大于10的数的平方:
values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values if x <= 10]
print squares

函数

# 定义函数

def add(x, y):
    """ Add two numbers """
    a = x + y
    return a
# 函数通常有以下几个特征:
# 1. 使用def关键词来定义一个函数。
# 2. def后面是函数的名称, 括号中是函数的参数, 不同的参数用,隔开, def foo():的形式是必须要有的, 参数可以为空;
# 3. 使用缩进来划分函数的内容;
# 4. docstring 用"""包含的字符,用来解释函数的用途,可省略;
# 5. return返回特定的值,如果省略,返回None。


# 使用函数
print add(2, 3)
print add("foo", "bar")

# 设定函数的默认值

# 可以在设定函数定义的时候给参数设定默认值,例如:
def quad(x, a = 1, b = 0, c = 0):
    return a*x**2 + b*x + c
# 可以省略有默认值的参数
print quad(2.0) 

# 接受不定参数

# 使用以下方法,可以使函数接受不定数目的参数:
def add(x, *args):
    total = x
    for arg in args:
        total += arg
    return total

# 这里,*args表示参数数目不定,可以看成一个元组, 把第一个参数后面的参数当做元组的元素
print add(1, 2, 3, 4)
print add(1, 2)

# 返回多个值
form math import atan2

def to_polar(x, y):
    r = (x**2 + y**2) ** 0.5
    theta = atan2(y, x)
    return r, theta

r, theta = to_polar(3, 4)
print r, theta

# map方法生成序列
def sqr(x):
    return x ** 2

a = [2, 3, 4]
print map(sqr, a)

# 其用法为: map(aFun, aSeq), 将函数aFun应用到序列aSeq上的每一个元素上,返回一个列表,不管这个序列原来是什么类型。事实上,根据函数参数的多少,map可以接受多组序列,将其对应的元素作为参数传入函数:
def add(x, y):
    return x + y

a = (2, 3, 4)
b = [10, 5, 3]
print map(add, a, b)

模块和包

模块 

# Python会将所有.py结尾的文件认定为Python代码文件, 考虑下面的脚本ex1.py:
%%writefile ex1.py

PI = 3.1416

def sum(lst):
    tot = lst[0]
    for value in lst[1:]:
        tot = tot + value
    return tot

w = [0, 1, 2, 3]
print sum(w), PI

# 执行这个文件
%run ex1.py

# 这个脚本可以当做一个模块,可以使用import关键词加载并执行它(这里要求ex1.py在当前工作目录)
import ex1

 __name__ 属性

有时候我们想讲一个.py文件既当做脚本,又能当作模块用,这个时候可以使用__name__这个属性。

只有当文件被当做脚本执行的时候, __name__的值才会是'__main__',所以我们可以:

%%writefile ex2.py

PI = 3.1416

def sum(lst):
    """ Sum the values in a list
    """
    tot = 0
    for value in lst:
        tot = tot + value
    return tot

def add(x, y):
    " Add two values."
    a = x + y
    return a

def test():
    w = [0,1,2,3]
    assert(sum(w) == 6)
    print 'test passed.'
    
if __name__ == '__main__':
    test()


# 运行文件
%run ex2.py

# 当做模块导入,test()不会执行
import ex2

import ex2 as e2
e2.PI

假设我们有这样一个文件夹:

foo/

  • __init__.py
  • bar.py(defines func)
  • baz.py(defines zap)

这意味着foo是一个包,我们可以这样导入其中的内容:

from foo.bar import func
from foo.baz import zap

bar 和 baz都是foo文件夹下的.py文件

导入包要求:

  • 文件夹foo在Python的搜索路径中
  • __init__.py表示foo是一个包,它可以是个空文件

常用的标准库

  • re 正则表达式
  • copy 赋值
  • math, cmath 数学
  • decimal, faction
  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值