享受每一天,Just Enjoy !

0%

Python基础 Zero to Hero函数(一)

1.什么是函数

我们在写程序的时候会多次使用重复的代码,函数就可以简化这种重复。我们在函数里写重复的内容, 然后等需要使用的时候直接调用就可以

  • Python函数定义的通常格式为:
    1
    2
    3
    4
    def 函数名(参数列表):
    #函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
    函数体
    #return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
  • 定义函数
    先进入到python的命令行模式
    1
    2
    3
    4
    5
    6
    ➜  ~ source yiluo/bin/activate
    (yiluo) ➜ ~ python3
    Python 3.7.5 (default, Nov 29 2019, 14:32:46)
    [Clang 9.0.0 (clang-900.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
  • 创建一个输出任意范围内 Fibonacci数列的函数:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def fib(n):
    ... a, b = 0, 1
    ... while a<n:
    ... print(a, end=' ')
    ... a, b = b, a+b
    ... print()
    ...
    >>> fib(2000)
    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
    【1】.def 关键字定义函数
    【2】.函数体的第一个语句可以(可选的)是字符串文字
    【3】.函数的 执行 会引入一个用于函数局部变量的新符号表
    【4】.在函数被调用时,实际参数(实参)会被引入被调用函数的本地符号表中
    【5】.函数名称的值具有解释器将其识别为用户定义函数的类型。这个值可以分配给另一个名称
    1
    2
    3
    4
    5
    >>> fib
    <function fib at 0x10726a290>
    >>> f = fib
    >>> f(100)
    0 1 1 2 3 5 8 13 21 34 55 89
  • 写一个返回斐波那契数列的列表(而不是把它打印出来)的函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> def fib2(n):
    ... result = []
    ... a, b = 0, 1
    ... while a<n:
    ... result.append(a)
    ... a, b =b ,a+b
    ... return result
    ...
    >>> f100 = fib2(100)
    >>> f100
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    >>>

    2.内置函数

    内置函数就是 Python解释器中不用引入任何包,一直可以使用的函数义和调用
    图片来自官方文档
  • 常用的len type abs来看一下
    1
    2
    3
    4
    5
    6
    7
    8
    >>> a = 'hello'
    >>> len(a)
    5
    >>> type(a)
    <class 'str'>
    >>> b = -1
    >>> abs(b)
    1
    len获取来字符串的个数
    type获取了类型是字符串
    abs是绝对值函数 -1的绝对值是1

3.变量作用域

局部变量全局变量

  • 创建一个文件,然后vim进行编辑
    1
    2
    (yiluo) ➜  Code touch a.py
    (yiluo) ➜ Code vim a.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python3
    def demo():
    n = 100
    print(n)

    n = 1
    print("Before demo ", n)
    print("Inside demo", end=' ')
    demo()
    print("After demo", n)
  • 保存文件然后命令行执行看一下结果
    1
    2
    3
    4
    (yiluo) ➜  Code python a.py
    Before demo 1
    Inside demo 100
    After demo 1
    以上 n=1 是全局变量, n=100是局部变量
  • global关键字
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/env python3
    def demo2():
    global n
    n = 100
    print(n)

    n = 1
    print("Before demo2", n)
    print("Inside demo2", end=' ')
    demo2()
    print("After demo2", n)
  • 保存文件,然后在命令行模式下运行
    1
    2
    3
    4
    (yiluo) ➜  Code python b.py
    Before demo2 1
    Inside demo2 100
    After demo2 100

    4.函数的参数

    Python 常用参数有四种:必选参数默认参数可变参数关键字参数
  • 必选参数
    1
    2
    3
    4
    5
    6
    7
    >>> def student(name, age):
    ... print("NAME: ", name)
    ... print("AGE: ", age)
    ...
    >>> student('yiluo', 18)
    NAME: yiluo
    AGE: 18
  • 也可是使用参数名进行传参
    1
    2
    3
    >>> student(name='yiluo', age=18)
    NAME: yiluo
    AGE: 18
  • 默认参数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def student(name, age=18):
    ... print("NAME: ", name)
    ... print("AGE: ", age)
    ...
    >>> student('yiluo')
    NAME: yiluo
    AGE: 18
    >>> student('yiluo', 20)
    NAME: yiluo
    AGE: 20
    如果不传年龄会自动给出默认年龄值
  • 可变参数
    可变参数的定义格式是在参数名前面加上 * ,参数名可以自定义,通常写成 *args
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def student(name, age=19, *score):
    ... print("NAME: ", name)
    ... print("AGE: ", age)
    ... print("SCORE: ", score)
    ...
    >>> student('yiluo',19,88,90,100)
    NAME: yiluo
    AGE: 19
    SCORE: (88, 90, 100)
    学生的得分分别是 8890100
  • 关键字参数
    关键字参数的定义格式是在参数名前面加上 ** ,参数名可以自定义,通常写成 **kw
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def student(name, age, **score):
    ... print("NAME: ", name)
    ... print("AGE: ", age)
    ... print("SCORE: ", score)
    >>> score = {'数学':'88', '语文':'90','英语':'100'}
    >>> student('yiluo', 19, **score)
    NAME: yiluo
    AGE: 19
    SCORE: {'数学': '88', '语文': '90', '英语': '100'}
  • 命名关键字参数
    前文提到,必选参数默认参数可变参数在赋值时都可以不写参数名,而命名关键字参数恰好相反, 赋值时必须写上参数名
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def student(*, name):
    ... print("Hello", name)
    ...
    >>> student('yiluo')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: student() takes 0 positional arguments but 1 was given
    >>> student(name='yiluo')
    Hello yiluo

    ……待续

在这里插入图片描述

享受每一天,Just Enjoy !

关注公众号查看更多内容