zoukankan      html  css  js  c++  java
  • Python 学习---------Day5

    第十四章 文档
    class employee:
    "class doumentation"
    pass
    print employee.__doc__
    #注释会保存在__doc__属性中以供查看.

    import sys
    print sys.__doc__
    print int.__doc__

    第十五章 函数基础
    def 是可执行的代码
    def创建了一个对象并将其赋值给某一变量名
    return将一个结果对象发送给调用者
    函数是通过赋值(对象引用)传递的
    global申明了一个模块的变量并被赋值
    参数,返回值以及变量并不是声明
    def intersect(seq1,seq2):
    res=[]
    for x in seq1:
    if x inseq2:
    res.append(x)
    return res
    第十六章 作用域和参数
    一个在def内定义的变量名能够被def内的代码使用,不能在函数的外部引用这样的变量名
    def之中的变量名与def之外的变量名并不发生冲突,即使是使用在别处的相同的变量名,一个在def之外被赋值(例如在另外一个def之中或者在模块文件的顶
    层)的变量x与在这个def之中的变量x是完全不同的变量
    函数定义了本地作用域,而模块定义的是全局作用域.
    内嵌的模块是全局作用域:每一个模块都是一个全局作用域,对于外部的全局变量变成一个模块对象的属性,但是在一个模块中能够像简单的变量一样使用
    变量名引用分为三个作用域进行查找,首先是本地,之后是函数内,之后是全局,最后是内置
    在默认的情况下,变量名赋值会创建或者改变本地变量
    全局声明将赋值变量名映射到模块文件内部的作用域

    作用域与带有循环变量的默认参数相比较
    def make():
    acts=[]
    for i in range(5):
    acts.append(lambda x:i**x)
    return acts
    acts[0](2) 4
    acts[2](2) 4
    这里的原因是i对于每一个列表中的函数都是相同的值4
    这是嵌套作用域的值和默认参数方面遗留的一种需要解释清楚的情况,而不是引用所在的嵌套作用域的值
    为了能让这类代码可以工作,必须使用默认参数把当前的值传递给嵌套作用域的变量
    因为默认参数是在嵌套函数创建时候评估的,而不是在其稍后它调用时
    def make():
    acts=[]
    for i in range(5):
    acts.append(lambda x,i=i:i**x)
    return acts
    不可变参数是通过值进行传递
    可变对象是通过指针进行传递
    def change(a,b):
    a=1
    b[0]='spam'

    x=1
    L=[1,2]
    change(x,L)
    x=1
    L={'spam',2]
    避免可变参数的修改
    L=[1,2]
    change(x,L[:])

    def change(a,b):
    b=b[:]
    a=2
    b[0]='spam'
    任意参数的实例
    def f(*arg):
    print arg
    def f(**arg):
    print arg
    f() {}
    f(a=1,b=2) {'a':1,'b':2}
    def f(a,*pargs,**kargs):
    print a,pargs,kargs

    def min(*args):
    res=args[0]
    for i in args[1:]:
    if res<args[i]
    res=args[i]
    return res

    def min(first,*rest):
    for arg in rest:
    if first<arg:
    first=arg
    return first

    def min(*args):
    tmp=list(args)
    tmp.sort()
    return tmp[0]
    第十七章 函数的高级话题
    匿名函数:lambda
    lambda是一个表达式,而不是一个语句
    lambda的主体是一个单个的表达式,而不是一个代码块
    def fun(x,y):
    return x+y
    fun(2,4,5)

    f=lambda x,y,z:z=x+y
    f(2,3,4)

    x=(lambda a='fee',b='fie',c='d':a+b+c)
    x("wee")

    def knights():
    title='sir'
    action=(lambda x:title+' '+x)
    return action
    act=knights()
    act('ad')

    内置函数apply
    def fun(x,y,z):
    return x+y+z
    apply(fun,(2,3,4))
    f=lambda x,y,z:x+y+z
    apply(f,(2,3,4))
    在序列中映射函数 map
    count=[1,2,3,4]
    a=[]
    for x in count:
    a.append(x+10)

    def inc(x):x+10
    map(inc,count)
    map((lambda x:x+10),count)
    函数式编程工具:filter和reduce
    range(-5,5)
    filter((lambda x:x>0),range(-5,5))

    列表解析
    res=[ord(x) for x in 'spam']
    [x**2 for x in range(10)]
    map((lambda x:x**2),range(10))
    [x for x in range(5) if x%2==0]

    重访迭代器:生长器
    def gen(n):
    for i in range(n):
    yield i**2
    x=gen(4)
    x.next()
    x.next()
    生成器表达式:迭代器遇到列表解析
    [x**2 for x in range(4)]
    (x**2 for x in range(4)) //返回迭代对象,使用next()获取

  • 相关阅读:
    位记录——Windows 7已安装Sublime Text 3、cynwin、SublimeClang
    尺度空间(Scale space)理论
    D3DXMatrixMultiply 函数
    素数推断算法(高效率)
    去除win7 64位系统桌面图标小箭头
    Bag标签之中的一个行代码实行中文分词实例1
    7个最好的免费杀毒软件下载
    利用Excel批量高速发送电子邮件
    Hibernate Criterion
    IOS新手教程(二)-控制流
  • 原文地址:https://www.cnblogs.com/SqLver/p/4941773.html
Copyright © 2011-2022 走看看