zoukankan      html  css  js  c++  java
  • 函数初识

    面向过程编程和函数式编程

    面向过程编程的缺点

    1. 代码重复多

    2. 代码可读性差

    函数

    1. 什么是函数?

    函数就是对一项功能的封装

    2. 函数的结构

    比如我们计算一个字符串或列表的长度,我们可以写一个这样的函数

     1 def lenth(s):  # s为形参
     2     """
     3     计算可迭代对象长度
     4     :param s:
     5     :return:
     6     """
     7     count = 0
     8     for i in s:
     9         count += 1
    10     return count

    def是定义函数,下面写函数的执行语句,return是给函数的调用者返回一个或多个值,多个值以元组的形式返回

    解释器遇到def是不会执行的,只有调用的时候才会执行,调用是函数名加一个括号,如lenth(l1),l1是传入的一个列表,称为实参,也就是实际传入的参数

    return作用

    1. 函数遇到return直接结束

    2. return给函数的执行者(函数名加括号)返回值
    单独return返回None
    return单个值------>返回单个值,数据类型不变
    return多个值------>返回以一个元组

    3. 函数传参

    函数的参数分为位置参数、关键字参数和混合参数

    位置参数

    函数可以传入多个参数,不加特别声明,就是位置参数,这些参数从左到右需一一对应

    例如我们设计一个求两个数中的较大值的函数

    1 def get_max(a, b):     # a,b就是位置参数
    2     return a if a >= b else b
    3 
    4 
    5 print(get_max(2, 3))

    关键字参数

    1 def func(name, movie):
    2     print("%s是%s中的人物" % (name, movie))
    3 
    4 
    5 func(movie="夏洛特烦恼", name="大春")

    关键字参数的顺序可以颠倒

    混合参数

    位置参数和关键字参数可以混合使用,来看代码

    1 def func(name, year, movie):    # 关键字参数必须在位置参数后面,不管是在形参位置和实参位置
    2     print("%s是%s中的人物,故事发生在%s年" % (name, movie, year))
    3 
    4 
    5 func("大春", 1998, movie="夏洛特烦恼")  

    执行结果

    大春是夏洛特烦恼中的人物,故事发生在1998年

    默认参数

    给形参设置默认值,通常是常用的数值,可以更改,需要注意的是默认参数一定要放在位置参数的后面

    1 def func(movie, actor, country="中国"):    # 默认参数必须在位置参数后面
    2     print("%s是在%s上映的一部电影,主角是%s" % (movie, country, actor))
    3 
    4 
    5 func("夏洛特烦恼", "夏洛", "美国")     # 也可以写成country="美国",如果不写就是中国

    执行结果

    夏洛特烦恼是在美国上映的一部电影,主角是夏洛

    默认参数这里有一个小陷阱,当默认参数是一个容器型数据类型时,那么这个数据在内存里只有一个,看一个实例

    1 def func1(a, lst=[]):   # 默认参数如果是一个容器型数据类型,那么这个数据在内存中只有一个
    2     lst.append(a)
    3     return lst
    4 
    5 
    6 print(func1(666))       # [666]
    7 print(func1(22))        # [666,22]
    8 print(func1(33, []))    # [33]

    这里的默认参数是一个空列表,当第一次添加666时,这个列表变成了[666],第二次调用func函数添加22时,系统不会重新创建一个空列表,而是沿用之前的列表,而之前的列表已经变成了[666],因此再重新添加22时就会变成[666,22]。第8行重新给默认值参数传了一个空列表,表示不用默认的列表,而是用新传入的空列表,所以结果是[33]

    万能参数

    两个形参参数,接收所有的位置参数和关键字参数

    1 def func(*args, **kwargs):
    2     print(args)    # arg是以元组的形式
    3     print(kwargs)  # kwargs是以字典的形式
    4 
    5 
    6 func(1, 2, name="Ara", age=18)

    执行结果

    (1, 2)
    {'name': 'Ara', 'age': 18}

    小结

    实参角度

    (1)位置参数从左到右一一对应

    (2)关键字参数从左到右一一对应,顺序随便

    (3)混合参数,关键字参数一定要在位置参数后面

    形参角度

    (1)位置参数从左到右一一对应

    (2)默认参数一定要放到位置参数后面

    (3)万能参数接收实参角度的所有位置参数,关键字参数

  • 相关阅读:
    repr() Vs str()
    默认参数
    元组
    字典
    电脑可以办的两类最基本的事情
    代码块
    变量名
    print的逻辑
    input的逻辑
    让python2听懂中文
  • 原文地址:https://www.cnblogs.com/zzliu/p/10191034.html
Copyright © 2011-2022 走看看