• 抽象


    抽象
    函数
    判断某个对象是否可调用,可使用内置函数callable
    自定义函数:使用def语句
    def fibs(num):
    result = [0,1]
    for i in range(num-2):
    result.append(result[-2] + result[-1])
    return result
    >>>fibs(10)
    注:return语句用于从函数返回值
    函数参数:
    在def语句中,位于函数名后面的变量通常称为形参,而调用函数时提供的值为实参
    def change(n):
    n[0] = "root"
    >>>names=['webadmin','clouder']
    >>>change(names)
    >>>names --->['root', 'clouder']
    在函数内修改了参数,修改了变量关联到的列表:相当于:
    >>>names=['webadmin','clouder']
    >>>n=names #再次假装传递名字作为参数
    >>>n[0]="root" #修改列表
    >>>names --->['root', 'clouder']
    将同一个列表赋值给两个变量,这两个变量将同时指向这个列表。要避免这样的结果,必须创建列表的副本;对列表执行切片操作时,返回的切片都是副本。
    >>>names=['webadmin','clouder']
    >>>n=names[:]
    >>>n --->['webadmin', 'clouder']
    >>>n == names --->True
    >>>n is names --->False
    注:n和names是两个相等但不同的列表,现若像函数change中那样修改n,将不会影响names
    >>>n[0] = "osadmin"
    >>>n --->['osadmin', 'clouder']
    >>>names --->['webadmin', 'clouder']
    修改参数:
    def init(data): #创建一个初始化数据结构的函数
    data['first'] = {}
    data['middle'] = {}
    data['last'] = {}
    >>>storage = {}
    >>>init(storage)
    >>>storage --->{'first': {}, 'middle': {}, 'last': {}}
    def lookup(data,lable,name):
    return data[lable].get(name)
    获取人员姓名的函数:函数lookup接受参数lable和name,并返回一个由全名组成的列表,返回的是储存在数据结构中的列表,若对返回的列表进行修改,将影响数据结构。
    def store(data,full_name):
    names=full_name.split()
    if len(names)==2: names.insert(1,"")
    lables = 'first','middle','last'
    for lable,name in zip(lables,names):
    people=lookup(data,lable,name)
    if people:
    people.append(full_name)
    else:
    data[lable][name] = [full_name]
    结合上面的init,lookup函数:
    >>>myname={}
    >>>init(myname)
    >>>store(my,"webadmin clouder root")
    关键字参数和默认值:
    使用名称指定的参数称为关键字参数,主要优点是有助于说明各个参数的作用
    def hello_1(greeting,name):
    print("{},{}!".format(greeting,name))
    def hello_2(name,greeting):
    print("{},{}!".format(name,greeting))
    def hello_3(greeting="hello",name="world"):
    print("{},{}!".format(greeting,name))s
    >>>hello_1("hello","world") --->hello,world!
    >>>hello_2("hello","world") --->hello,world!
    >>>hello_3() --->hello,world!
    >>>hello_3("welcome") --->welcome,world!
    >>>hello_3("welcome","clouder") --->welcome,clouder!
    收集参数:
    def print_params(title,*params):
    print(title)
    print(params)
    >>>print_params("root",1,2,3,4,5,6)
    运行结果:
    root
    (1, 2, 3, 4, 5, 6)
    注:参数前面的星号(*)将提供的所有的值都放在一个元组中
    星号(*)收集余下的参数,若没有可收集的参数,将是一个空元组。
    星号(*)不会收集关键字参数;若要收集关键字参数,可使用两个星号(**),这样得到的是一个字典而不是元组
    def middle(x,*y,z,k):
    print(x,y,z,k)
    >>>middle(1,2,3,4,5,6,7,8) ---TypeError: middle() missing 2 required keyword-only arguments: 'z' and 'k'
    注:星号(*)不会收集关键字参数;所以需要使用名称来指定后续参数
    >>>middle(1,2,3,4,5,6,7,8,z=9,k=10) --->1 (2, 3, 4, 5, 6, 7, 8) 9 10
    def params(**params):
    print(params)
    >>>params(x="root",y=2,z=3) --->{'x': 'root', 'y': 2, 'z': 3}
    def par(x,y,z=3,*pospar,**keypar):
    print(x,y,z)
    print(pospar)
    print(keypar)
    >>>par(5,6,7,8,9,foo=1,bar=2)
    5 6 7
    (8, 9)
    {'foo': 1, 'bar': 2}
    >>>par(1,2)
    1 2 3
    ()
    {}
    ----------
    同时储存多个:
    def store(data,*full_name):
    for full_name in full_name:
    names=full_name.split()
    if len(names)==2: names.insert(1,"")
    lables = 'first','middle','last'
    for lable,name in zip(lables,names):
    people=lookup(data,lable,name)
    if people:
    people.append(full_name)
    else:
    data[lable][name] = [full_name]
    >>>myname={}
    >>>init(myname)
    >>>store(myname,"webadmin 1","clouder 2 2","root 3 3 4")
    作用域:(命名空间)
    局部变量和全局变量:
    局部变量:函数内部使用的变量
    在函数中访问全局变量:
    def combine(param):
    print(param + external)
    >>>external="HUB"
    >>>combine("python") --->pythonHUB
    这样访问全局变量有bug。若局部变量和全局变量同名,则无法直接访问全局变量,因为全局变量被遮住。
    另:使用函数globals来访问全局变量
    def combine(param):
    print(param + globals()['param'])
    >>>param ='python'
    >>>combine(param) --->pythonpython
    重新关联全局变量(使其指向新值):
    在函数内部给变量赋值时,默认是局部变量,若要其是全局变量,使用global
    def change_global():
    global x
    x=x+1
    >>>x=2
    >>>change_global()
    >>>x --->3
  • 相关阅读:
    Web Ajax入门一讲
    Delphi – 我的代码之简单五子棋
    闲话 纪念我的4520G
    Delphi 我的代码之窗体移动
    破文 黑客游戏
    破文 OD常用断点
    Web 简单的开始 – Ajax + XML +DOM
    工具 – XMLSPY 和 UModel 商业版 2010v12.0有注册机
    API InterlockedCompareExchange用法
    软件工程 设计模式学习之策略模式Strategy
  • 原文地址:https://www.cnblogs.com/skyzy/p/9432960.html
Copyright © 2020-2023  润新知