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)万能参数接收实参角度的所有位置参数,关键字参数

  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/zzliu/p/10191034.html
Copyright © 2011-2022 走看看