• python之函数


    1.OOP 面向对象编程,万物皆对象,以class为主,抽象化

    2.POP 面向过程变成,万事皆过程,def定义过程

    3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫function/方法/过程/子程序

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

    def hello():
        '这是一个简单的函数'
        print("hello world")
    hello()

    上面定义了一个函数hello(),并且调用了函数,最终效果是打印出一句hello world。我们可以从上面得到一些函数的基本定义方式。总结如下:

    • 函数以 def 关键词开头,后接函数名称和圆括号 (),()中传入参数。
    • 函数的第一行可以存放字符串说明函数的功能。

    我们再来看看有参数传递的函数,python中一切都是对象,所以传值的参数就可以分为两种,一种是不可变对象,例如字符串,元组,数字等;另一种是可变的对象,例如列表,字典等。

    传不可变对象类型类似于c++的值传递,只能将实参的值赋值给形参,而不能将形参的值传回给实参,形参的变化不会影响到实参的变化。

    def func1(a):
        a=3
        return a
    b=2
    func1(b)
    print('b=' + str(b) )
    结果:
    [python@master func]$ python3 1.py 
    b=2

    传可变对象,通过函数可以修改原对象的内容,类似于c++的引用传递,操作同一对象。

    def func2(a):
        a.append([1,2,3])
    
    b=[1,2,3]
    func2(b)
    print(b) 
    结果:
    [python@master func]$ python3 2.py 
    [1, 2, 3, [1, 2, 3]]

    有些函数参数会有默认值,即在调用函数时,不传入指定参数,则会使用定义时的默认值。在c++中,函数带默认值的参数写法遵循从右向左的顺序,以便在函数调用时能够正确传值,在Python中也遵循这个原则。另外,还可以用关键字传指定参数的值。如下例:

    def func3(name,age=20):
        print("名字",name,end=";")
        print("年龄",age)
    
    func3('ysg')
    func3(name='zs')
    print('''''''''''''''''''''''''''''''''''')
    def func3(name,age):
        print("名字",name,end=";")
        print("年龄",age)
    
    func3('zhang',20)
    func3(age=18,name='wang')
    结果:
    [python@master func]$ python3 3.py 
    名字 ysg;年龄 20
    名字 zs;年龄 20
    
    名字 zhang;年龄 20
    名字 wang;年龄 18

    此外,如果事先不清楚传入的参数个数,可以在参数前加*表示,在传入参数时,参数之间用逗号隔开。如下例,求解输入数据的加法:

    def func4(*number):
        sum=0
        for x in number:
            sum=sum+x
        print(sum)
    
    func4(1,2,3,4) 
    结果:
    [python@master func]$ python3 4.py 
    10

    lambda表达式 --创建匿名函数( 匿名函数的应用场景:应用于一次性的场景,临时使用

    lambda表达式是一个能够完成特定功能的表达式,与函数的作用一样,二者的区别主要是lambda表达式代码定义简单,可以在使用的时候定义,主要是完成一次特定的功能;而函数需要在使用前定义,可多次使用。lambda的基本语法如下:

    lambda arg1,arg2,...,argn:expression

    lambda表达式参数也可以指定默认值,也遵循函数定义时的规则,在调用时候也与函数一样。下面用了一个简单的实例:

    sum1 = lambda a,b:a+b;
    print(sum1(1,2))
    sum2 = lambda a,b=5:a+b;
    print(sum2(1))
    结果:
    [python@master func]$ python3 5.py 
    3
    6

    可以看到,lambda表达式返回的值就是表达式的值,在函数中,我们可以用return来返回函数的计算结果;return不带参数的话,作用就是退出程序并且返回None。如下例:

    def func5(a,b):
        if((type(a)!=int) | (type(b)!=int)):
            return;
        else:
            return (a+b);
    print(func5('a',2))
    print(func5(1,2))
    结果:
    [python@master func]$ python3 6.py 
    None
    3

    匿名函数结合使用内置函数的用法

    max,min,sorted,map,reduce,filter的用法

    字典的运算:最小值,最大值,排序

    salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
    }
    
    print(max(salaries))
    print(max(salaries.values()))
    print(max(salaries,key=lambda name:salaries[name]))
    print(min(salaries,key=lambda name:salaries[name]))
    print(max(zip(salaries.values(),salaries.keys()))[1])
    结果:
    [python@master func]$ python3 7.py 
    yuanhao
    100000000
    alex
    yuanhao
    alex

    map

    >>> names=['alex','wupeiqi','yuanhao','yanglei','egon']
    >>> res=map(lambda x:x if x == 'egon' else x+'二狗子',names)
    >>> print(res)
    <map object at 0x7f417ff3b908>
    >>> print(list(res))
    ['alex二狗子', 'wupeiqi二狗子', 'yuanhao二狗子', 'yanglei二狗子', 'egon']
    >>> 
  • 相关阅读:
    python-初始网络编程
    mysql 之优化
    python 操作Mysql
    白话SCRUM之一:SCRUM 的三个角色
    白话SCRUM 之三:sprint backlog
    Scrum 之 product Backlog
    9.为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗?
    8.如何自己设计一个类似 Dubbo 的 RPC 框架?
    7.分布式服务接口请求的顺序性如何保证?
    6.分布式服务接口的幂等性如何设计(比如不能重复扣款)?
  • 原文地址:https://www.cnblogs.com/hello-wei/p/9549645.html
Copyright © 2020-2023  润新知