• python03函数、递归


    本节内容

    1. 函数基本语法及特性

    2. 参数与局部变量

    3. 返回值

    4.递归

    5.匿名函数

    6.函数式编程介绍

    7.高阶函数

    8.内置函数

    1.函数基本语法及特性

    函数是什么?

    函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

    定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

    特性:

    1. 减少重复代码
    2. 使程序变的可扩展
    3. 使程序变得易维护

    语法定义

    1 def sayhi():#函数名
    2     print("Hello, I'm nobody!")
    3  
    4 sayhi() #调用函数

    可以带参数

     1 #下面这段代码
     2 a,b = 5,8
     3 c = a**b
     4 print(c)
     5  
     6  
     7 #改成用函数写
     8 def calc(x,y):
     9     res = x**y
    10     return res #返回函数执行结果
    11  
    12 c = calc(a,b) #结果赋值给c变量
    13 print(c)

    2.函数参数与局部变量

    形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

    实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

    默认参数

    看下面代码

     1 def stu_register(name,age,country,course):
     2     print("----注册学生信息------")
     3     print("姓名:",name)
     4     print("age:",age)
     5     print("国籍:",country)
     6     print("课程:",course)
     7  
     8 stu_register("王山炮",22,"CN","python_devops")
     9 stu_register("张叫春",21,"CN","linux")
    10 stu_register("刘老根",25,"CN","linux")

    发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单

    1 def stu_register(name,age,course,country="CN"):

    这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。


    另外,你可能注意到了,在把country变成默认参数后,我同时把它的位置移到了最后面,为什么呢?

    关键参数

    正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

    1 stu_register(age=22,name='alex',course="python",)

    非固定参数

    若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

     1 def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式
     2     print(name,age,args)
     3  
     4 stu_register("Alex",22)
     5 #输出
     6 #Alex 22 () #后面这个()就是args,只是因为没传值,所以为空
     7  
     8 stu_register("Jack",32,"CN","Python")
     9 #输出
    10 # Jack 32 ('CN', 'Python')

    还可以有一个**kwargs

     1 def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
     2     print(name,age,args,kwargs)
     3  
     4 stu_register("Alex",22)
     5 #输出
     6 #Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空
     7  
     8 stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
     9 #输出
    10 # Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}

    局部变量

     1 name = "Alex Li"
     2  
     3 def change_name(name):
     4     print("before change:",name)
     5     name = "金角大王,一个有Tesla的男人"
     6     print("after change", name)
     7  
     8  
     9 change_name(name)
    10  
    11 print("在外面看看name改了么?",name)

    输出

    1 before change: Alex Li
    2 after change 金角大王,一个有Tesla的男人
    3 在外面看看name改了么? Alex Li

    全局与局部变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    当全局变量与局部变量同名时:
    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
     
    3.返回值

    要想获取函数的执行结果,就可以用return语句把结果返回

    注意:

    1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着此函数的结束
    2. 如果未在函数中指定return,那这个函数的返回值为None 

    4.递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

     1 def calc(n):
     2     print(n)
     3     if int(n/2) ==0:
     4         return n
     5     return calc(int(n/2))
     6  
     7 calc(10)
     8  
     9 输出:
    10 10
    11 5
    12 2
    13 1

    递归特性:

    1. 必须有一个明确结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    5.匿名函数

    匿名函数就是不需要显式的指定函数

    1 #这段代码
    2 def calc(n):
    3     return n**n
    4 print(calc(10))
    5  
    6 #换成匿名函数
    7 calc = lambda n:n**n
    8 print(calc(10))

    你也许会说,用上这个东西没感觉有毛方便呀, 。。。。呵呵,如果是这么用,确实没毛线改进,不过匿名函数主要是和其它函数搭配使用的呢,如下

     1 res = map(lambda x:x**2,[1,5,7,4,8])
     2 for i in res:
     3     print(i)
     4 
     5 输出:
     6 1
     7 25
     8 49
     9 16
    10 64

    6.函数式编程

    函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

    而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。

    我们首先要搞明白计算机(Computer)和计算(Compute)的概念。

    在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言。

    而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。

    对应到编程语言,就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

    函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

    Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

    一、定义

    简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。

    主要思想是把运算过程尽量写成一系列嵌套的函数调用。举例来说,现在有这样一个数学表达式:

      (1 + 2) * 3 - 4

    传统的过程式编程,可能这样写:

    var a = 1 + 2;
    
    var b = a * 3;
    
    var c = b - 4;

    函数式编程要求使用函数,我们可以把运算过程定义为不同的函数,然后写成下面这样:

    var result = subtract(multiply(add(1,2), 3), 4);   #直接把函数当成参数传给函数

    7.高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    1 def add(x,y,f):
    2     return f(x) + f(y)
    3  
    4  
    5 res = add(3,-6,abs)
    6 print(res)

    8.内置函数

    以下是Python3版本所有的内置函数:

    1. abs()  获取绝对值

    1 >>> abs(-10)
    2 10
    3 >>> abs(10)
    4 10
    5 >>> abs(0)
    6 0
    7 >>> a = -10
    8 >>> a.__abs__()
    9 10

    2. all()  接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False

    >>> tmp_1 = ['python',123]
    >>> all(tmp_1)
    True
    >>> tmp_2 = []
    >>> all(tmp_2)
    True
    >>> tmp_3 = [0]
    >>> all(tmp_3)
    False

    3. any()  接受一个迭代器,如果迭代器里有一个元素为真,那么返回True,否则返回False

    4. ascii()  调用对象的__repr__()方法,获得该方法的返回值.

    5. bin(), 6. oct(),  7. hex()    三个函数功能为:将十进制数分别转换为2/8/16进制。

    8. bool()  测试一个对象是True还是False.

    9. bytes()  将一个字符串转换成字节类型

    >>> s = 'python'
    >>> x = bytes(s, encoding='utf-8')
    >>> x
    b'python'
    >>> a = ''
    >>> s = bytes(a, encoding='utf-8')
    >>> s
    b'xe7x8ex8b'

    10. str()  将字符类型/数值类型等转换为字符串类型

    >>> str(b'xe7x8ex8b', encoding='utf-8')  # 字节转换为字符串
    ''
    >>> str(1)   # 整数转换为字符串
    '1'

    11. challable()  判断对象是否可以被调用,能被调用的对象就是一个callables对象,比如函数和带有__call__()的实例

    >>> callable(max)
    True
    >>> callable([1, 2, 3])
    False
    >>> callable(None)
    False
    >>> callable('str')
    False

    12. char(),13. ord()  查看十进制数对应的ASCII字符/查看某个ASCII对应的十进制数

    >>> chr(-1)
    Traceback (most recent call last):
      File "<pyshell#26>", line 1, in <module>
        chr(-1)
    ValueError: chr() arg not in range(0x110000)
    >>> chr(0)
    'x00'
    >>> ord('x00')
    0
    >>> ord('7')
    55

    14. classmethod()  用来指定一个方法为类的方法,由类直接调用执行,只有一个cls参数,执行类的方法时,自动将调用该方法的类赋值给cls.没有此参数指定的类的方法为实例方法

    class Province:
        country = "中国"
          
        def __init__(self, name):
            self.name = name
          
        @classmethod
        def show(cls):  # 类方法,由类调用,最少要有一个参数cls,调用的时候这个参数不用传值,自动将类名赋值给cls
            print(cls)
          
    # 调用方法
    Province.show()

    15. complie()  将字符串编译成python能识别或可以执行的代码,也可以将文字读成字符串再编译。

    compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
    将source编译为代码或者AST对象。代码对象能过通过exec语句来执行或者eval()进行求值。
    参数source:字符串或者AST(abstract syntax trees)对象。
    参数filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
    参数model:指定编译代码的种类。可以指定'exec', 'eval', 'single'。
    参数flag和dont_inherit:这两个参数为可选参数。
    >>> s  = "print('helloworld')"
    >>> r = compile(s, "<string>", "exec")
    >>> r
    <code object <module> at 0x000001C648038390, file "<string>", line 1>

    16. complex()

    创建一个值为real + imag * j的复数或者转化一个字符串或数为复数。如果第一个参数是字符串,则不需要指定第二个参数。
    参数real:int,long,float或字符串。
    参数imag:int,long,float。

    17. delattr()  删除对象的属性

    18. dict()  创建数据字典

    >>> a = dict()  空字典
    >>> a
    {}
    >>> b = dict(one = 1, two =2)
    >>> b
    {'one': 1, 'two': 2}
    >>> c = dict({'one':1 ,'two':2})
    >>> c
    {'one': 1, 'two': 2}

    19. dir()  不带参数时返回当前范围内的变量,方法和定义的类型列表,带参数时返回参数的属性,方法列表。

    >>> dir()
    
    ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'li', 'li1', 'li2', 'li_1']
    >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    20. divmod()  分别取商和余数

    >>> divmod(20,6)
    (3, 2)

    21. enumerate()  返回一个可以枚举的对象,该对象的next()方法将返回一个元组。

    >>> test = ['a', 'b', 'c']
    >>> for k,v in enumerate(test):
        print(k,v)
     
    # 输出结果:
    0 a
    1 b
    2 c

    22. eval()  将字符串str当成有效的表达式来求值并返回计算结果;将字符串转换成字典。

    >>> s = "1+2*3"
    >>> type(s)
    <class 'str'>
    >>> eval(s)
    7

    23. exec()  执行字符串或complie方法编译过的字符串,没有返回值

    24. filter()  过滤器,构造一个序列,等价于[ item for item in iterables if function(item)],在函数中设定过滤条件,逐一循环迭代器中的元素,将返回值为True时的元素留下,形成一个filter类型数据。

    filter(function, iterable)
    参数function:返回值为True或False的函数,可以为None。
    参数iterable:序列或可迭代对象。
    >>> def bigerthan5(x):
    ...     return x > 5
    >>> filter(bigerthan5, [3, 4, 5, 6, 7, 8])
    [6, 7, 8]

    25. float()  讲一个字符串或整数转换为浮点数。

    >>> float()
    0.0
    >>> float('123')
    123.0
    >>> float(1)
    1.0
    >>> float('a')
    Traceback (most recent call last):
      File "<pyshell#45>", line 1, in <module>
        float('a')
    ValueError: could not convert string to float: 'a'

    26. format()  格式化输出字符串,format(value, format_spec)实质上是调用了value的__format__(format_spec)方法。

    >>> "I am {0}, I like {1}!".format("wang", "moon")    
    'I am wang, I like moon!'

    27. frozenset()  创建一个不可修改的集合。

    frozenset([iterable])
    set和frozenset最本质的区别是前者是可变的,后者是不可变的。当集合对象会被改变时(例如删除,添加元素),只能使用set,
    一般来说使用fronzet的地方都可以使用set。
    参数iterable:可迭代对象。 

    28. getattr()  获取对象的属性

    getattr(object, name [, defalut])

    获取对象object名为name的特性,如果object不包含名为name的特性,将会抛出AttributeError异常;如果不包含名为name的特性
    且提供default参数,将返回default。
    参数object:对象
    参数name:对象的特性名
    参数default:缺省返回值
    >>> append = getattr(list'append')
    >>> append
    <method 'append' of 'list' objects>
    >>> mylist = [345]
    >>> append(mylist, 6)
    >>> mylist
    [3456]
    >>> method = getattr(list'add')
    Traceback (most recent call last):
      File "<stdin>", line 1in <module>
    AttributeError: type object 'list' has no attribute 'add'
    >>> method = getattr(list'add''NoMethod')
    >>> method
    'NoMethod'
    29. globals()  返回一个描述当前全局变量的字典
    >>> a = 1
    >>> globals()
    {'__loader__': <class '_frozen_importlib.BuiltinImporter'>, 'a': 1, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None, '__name__': '__main__', '__package__': None, '__spec__': None}

    30. hasattr()

    hasattr(object,name)
    判断对象object是否包含名为name的特性(hasattr是通过调用getattr(object,name))是否抛出异常来实现的。
    参数object:对象
    参数name:特性名称
    >>> hasattr(list, 'append')
    True
    >>> hasattr(list, 'add')
    False

    31. hash()  哈希值

    hash(object)
    如果对象object为哈希表类型,返回对象object的哈希值。哈希值为整数,在字典查找中,哈希值用于快递比价字典的键。
    两个数值如果相等,则哈希值也相等。

    32. help()  返回对象的帮助文档

    调用内建的帮助系统,如果不包含参数,交互式帮助系统将在控制台启动。如果参数为字串,则可以是模块,类,方法等名称,并且帮助页面将会在控制台打印。参数也可以为任意对象

    33. id()  返回对象的内存地址

    >>> a = 1
    >>> id(a)
    1588522800

    34. input()  获取用户输入内容

    num = input("请输入一个数字:")
    # 用户输入3
    print(num)
    # 输出结果
    3

    35. int()  将一个字符串或数值转换为一个普通整数

    int([x[,radix]])
    如果参数是字符串,那么它可能包含符号和小数点。参数radix表示转换的基数(默认是10进制)。
    它可以是[2,36]范围内的值,或者0。如果是0,系统将根据字符串内容来解析。
    如果提供了参数radix,但参数x并不是一个字符串,将抛出TypeError异常;
    否则,参数x必须是数值(普通整数,长整数,浮点数)。通过舍去小数点来转换浮点数。
    如果超出了普通整数的表示范围,一个长整数被返回。
    如果没有提供参数,函数返回0。

    36. isinstance()  检查对象是否是类的对象,返回True或False

    isinstance(obj, cls)
    检查obj是否是类cls的对象, 返回True 或 False
    class Foo(object):
        pass
    obj = Foo()
    isinstance(obj, Foo)

    37. issubclass()  检查一个类是否是另一个类的子类。返回True或False

    issubclass(sub, super)
    检查sub类是否是super类的派生类(子类)。返回True 或 False
     
    class Foo(object):
        pass
       
    class Bar(Foo):
        pass
       
    issubclass(Bar, Foo) 

    38. iter()

    iter(o[, sentinel])
    返回一个iterator对象。该函数对于第一个参数的解析依赖于第二个参数。
    如果没有提供第二个参数,参数o必须是一个集合对象,支持遍历功能(__iter__()方法)或支持序列功能(__getitem__()方法),
    参数为整数,从零开始。如果不支持这两种功能,将触发TypeError异常。
    如果提供了第二个参数,参数o必须是一个可调用对象。在这种情况下创建一个iterator对象,每次调用iterator的next()方法来无
    参数的调用o,如果返回值等于参数sentinel,触发StopIteration异常,否则将返回该值。

    39. len()  返回对象长度,参数可以是序列类型(字符串,元组或列表)或映射类型(如字典)

    40. list()  列表构造函数。

    list([iterable])
    list的构造函数。参数iterable是可选的,它可以是序列,支持编译的容器对象,或iterator对象。
    该函数创建一个元素值,顺序与参数iterable一致的列表。如果参数iterable是一个列表,将创建
    列表的一个拷贝并返回,就像语句iterables[:]。 

    41. locals()  打印当前可用的局部变量的字典

    不要修改locals()返回的字典中的内容;改变可能不会影响解析器对局部变量的使用。
    在函数体内调用locals(),返回的是自由变量。修改自由变量不会影响解析器对变量的使用。
    不能在类区域内返回自由变量。

    42. map()

    map(function, iterable,...)
    对于参数iterable中的每个元素都应用fuction函数,并将结果作为列表返回。
    如果有多个iterable参数,那么fuction函数必须接收多个参数,这些iterable中相同索引处的元素将并行的作为function函数的参数。
    如果一个iterable中元素的个数比其他少,那么将用None来扩展改iterable使元素个数一致。
    如果有多个iterable且function为None,map()将返回由元组组成的列表,每个元组包含所有iterable中对应索引处值。
    参数iterable必须是一个序列或任何可遍历对象,函数返回的往往是一个列表(list)。
     
    li = [1,2,3]
    data = map(lambda x :x*100,li)
    print(type(data))
    data = list(data)
    print(data)
     
    运行结果:
     
    <class 'map'>
    [100, 200, 300]

    43. max()  返回给定元素里最大值

    max(iterable [,args...][, key])
    如果只提供iterable参数,函数返回可遍历对象(如:字符串,元组或列表)中最大的非空元素。
    如果提供多个参数,那么返回值最大的那个参数。
    可选参数key是单参数的排序函数。
    如果提供key参数,必须是以命名的形式,如:max(a, b, c, key = fun)

    44. meoryview()

    45. min()  返回给定元素里最小值

    min(iterable [,args...][, key])
    如果只提供iterable参数,函数返回可遍历对象(如:字符串,元组或列表)中最小的非空元素。
    如果提供多个参数,那么返回值最小的那个参数。
    可选参数key是单参数的排序函数。
    如果提供key参数,必须是以命名的形式,如:max(a, b, c, key = fun)

    46. next()  返回一个可迭代数据结构(如列表)中的下一项

    47. object()

    获取一个新的,无特性(geatureless)对象。Object是所有类的基类。它提供的方法将在所有的类型实例中共享。
    该函数时2.2.版本新增,2.3版本之后,该函数不接受任何参数。

    48. open()  打开文件

    open(filename [, mode [, bufsize]])
    打开一个文件,返回一个file对象。 如果文件无法打开,将处罚IOError异常。
    应该使用open()来代替直接使用file类型的构造函数打开文件。
    参数filename表示将要被打开的文件的路径字符串;
    参数mode表示打开的模式,最常用的模式有:'r'表示读文本,'w'表示写文本文件,'a'表示在文件中追加。
    Mode的默认值是'r'。
    当操作的是二进制文件时,只要在模式值上添加'b'。这样提高了程序的可移植性。
    可选参数bufsize定义了文件缓冲区的大小。0表示不缓冲;1表示行缓冲;任何其他正数表示使用该大小的缓冲区;
    负数表示使用系统默认缓冲区大小,对于tty设备它往往是行缓冲,而对于其他文件往往完全缓冲。如果参数值被省却。
    使用系统默认值。

    49. pow()  幂函数

    r = pow(2, 10)  # 2的10次方
    print(r)
                  
    # 输出
    1024

    50. print()  输出函数

    python2中的print语句被python3中的print()函数取代。
    如何限制print的默认换行:
    1. python2版本下,在print输出的最后加一个逗号','
    2. python3.4以后,print(value, ...,sep='',end='
    ',file=sys.stdout,flush=False),将end设为空即可。

    51. property()

    52. range()  根据需要生成一个指定范围的数字,可以提供你需要的控制来迭代指定的次数

    53. repr()  将任意值转换为字符串,供计时器读取的形式

    repr(object)
    返回一个对象的字符串表示。有时可以使用这个函数来访问操作。
    对于许多类型来说,repr()尝试返回一个字符串,eval()方法可以使用该字符串产生对象;
    否则用尖括号括起来的,包含类名称和其他二外信息的字符串被返回。

    54. reversed()   反转,逆序对象

    reversed(seq)
    返回一个逆序的iterator对象。参数seq必须是一个包含__reversed__()方法的对象或支持序列操作(__len__()和__getitem__())
    该函数是2.4中新增的

    55. round()  四舍五入

    round(x [, n])
    对参数x的第n+1位小数进行四舍五入,返回一个小数位数为n的浮点数。
    参数n的默认值是0。结果是一个浮点数。如round(0.5)结果为1.0
    >>> round(4,6)
    4
    >>> round(5,6)
    5

    56. set()

    57. setattr()  与getattr()相对应

    58. slice()  切片功能

    59. sorted()  排序

    >>> sorted([36,6,-12,9,-22])  列表排序
    [-22, -12, 6, 9, 36]
    >>> sorted([36,6,-12,9,-22],key=abs) 高阶函数,以绝对值大小排序
    [6, 9, -12, -22, 36]
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'])  字符串排序,按照ASCII的大小排序
    ['Credit', 'Zoo', 'about', 'bob']
    如果需要排序的是一个元组,则需要使用参数key,也就是关键字。
    >>> a = [('b',2), ('a',1), ('c',0)]
    >>> list(sorted(a,key=lambda x:x[1]))   按照元组第二个元素排序
    [('c', 0), ('a', 1), ('b', 2)]
    >>> list(sorted(a,key=lambda x:x[0]))   按照元组第一个元素排序
    [('a', 1), ('b', 2), ('c', 0)]
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'],key=str.lower) 忽略大小写排序
    ['about', 'bob', 'Credit', 'Zoo'] 
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'],key=str.lower,reverse=True) 反向排序
    ['Zoo', 'Credit', 'bob', 'about']

    60. staticmethod()

    61. str()  字符串构造函数

    62. sum()  求和

    63. super()  调用父类的方法

    64. tuple()  元组构造函数

    65. type()  显示对象所属的类型

    66. vars()  

    67. zip()  将对象逐一配对

    list_1 = [1,2,3]
    list_2 = ['a','b','c']
    s = zip(list_1,list_2)
    print(list(s))
     
    运行结果:
     
    [(1, 'a'), (2, 'b'), (3, 'c')]

    68. __import__()

  • 相关阅读:
    Linux九阴真经之催心掌残卷5(正则表达式)
    Linux九阴真经之催心掌残卷4(grep文本处理 )
    Linux九阴真经之催心掌残卷3
    Linux九阴真经之催心掌残卷2
    0.1.kubeadm快速部署kubernetes
    0.2.kubeadm搭建kubernetes高可用集群(CentOS)
    Nginx——模块(1)
    Nginx——主配置段
    Nginx——安装
    Nginx——I/O模型
  • 原文地址:https://www.cnblogs.com/fuckily/p/5749605.html
Copyright © 2020-2023  润新知