zoukankan      html  css  js  c++  java
  • Python 全栈开发:python函数基础

    python函数

    一、函数是什么?

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

    特性:

    1.减少重复代码

    2.使程序变的易扩展

    3.是程序变得易维护

    二、函数的定义(语法)

    def:定义函数的关键字

    函数名:用来调用函数的(函数名的定义需具有一定描述性的含义,让人家大概能知道函数的作用是什么)

    文档描述:函数的使用说明

    代码块:实现功能的代码

    return:函数的返回值

    eg:

    def 函数名(参数1,参数2......):
          
         ‘’‘
         文档描述
         ’‘’     
    代码块1 代码块2 ......
    return

    计算两个数(a,b)的和

    eg:

    def my_sum(a,b):
        sum = a+b
        return sum

    三、函数的调用

    1.调用方式

    res  =  函数名(实参,实参)

    根据函数名找到函数的内存地址,然后执行函数体代码

    eg:调用上面定义的没有my_sum(a,b) 函数

    # 计算x,y 的和
    x = 10
    y = 20
    res = my_sum(x, y)
    print(res)

    2.遵循的规则

    先定义,后调用的原则

    没事先定义函数直接调用,相当于在引用一个不存在的变量(报错:xxx is not define)

    def foo():
        print('调用了函数 foo()')
        bar()
    def bar():
        print('调用了函数 bar()')
    # 调用函数
    foo()


    结果:
    调用了函数 foo()
    调用了函数 bar()

    下面的这种调用方式:违反了先定义,后调用的原则,出现错误

    def foo():
        print('调用了函数 foo()')
        bar()
    # 调用函数
    foo()
    def bar():
        print('调用了函数 bar()')

    错误:

    NameError: name 'bar' is not defined

    四、函数的返回值(return)

    作用:退出函数,选择性的向调用方返回结果(即:返回值,默认返回值为 None)

    返回值基本三种形式:

    1.没有return,返回值 None

    def func1():
        print('这个函数的返回值为None')

    2.return 一个值,返回该值本身

    def func2():
        print('这个函数的返回值为:你好啊')
        return '你好啊'

    3.return 多个值,逗号分割,返回一个元组

    def func3():
        print('这个函数的返回值为(1,2,3,5,6)')
        return 1, 2, 3, 5, 6

    五、函数的参数

    1.形参和实参

    形参(形式参数):在函数定义时,括号内定义的参数

    实参(实际参数):在调用函数时,括号内传入的参数

    注意:实参与形参只有在函数调用的时候才会绑定(即讲值传入函数内),在函数调用结束后就会立刻解除绑定

    2.参数类型

    位置参数,关键字参数,默认参数,可变参数  

    位置参数

    什么是位置参数:就是根据顺序依次定义的函数

    哪些是位置函数

    1.位置形参:函数定义时,括号内按照位置依次定义的参数

    2.位置实参:函数调用时,括号内按照位置依次传入的参数

    def foo(x,y,z):
        print(x,y,z)

    需要注意的是:调用函数时,位置实参要与位置形参一一对应

    关键字参数

    什么是关键字参数:在函数调用时,按照 key-value 形式定义的实参,称为关键字参数

    eg:

    def foo(x, y, z):
        print(x, y, z)
    
    
    foo(1, 2, 3)        # 位置参数的调用方式
    foo(x=1, y=2, z=3)  # 关键字参数
    foo(y=2, x=1, z=3)  # 关键字参数

    注意点:

    通俗一点的说,就是指名道姓的给形式参数传值,即使不按照顺序定义实参,也能给形参传值

    关键字参数与位置参数一起使用:

    遵循的规则:

    1.必须遵循形参的规则

    2.不能为同一形参重复传值

    3.位置参数必须放在关键字参数的前面

    默认参数

    什么是默认函数:在函数定义时,已经被赋值的形参,叫做默认参数

    注意点:

    1.在函数调用的时候,有默认值的形参,可以不给其传值

    def register(name, age, sex='male'):    # sex是默认参数
        print(name, age, sex)
    
    register('fixd', 18, )          # 默认参数 没有传值
    register('mike', 20, 'female')  # 默认参数 传入一个新值

    # 结果
    # fixd 18 male     # 没有传值,会使用默认值     
    # mike 20 female    # 传入新值,会覆盖掉默认值

    2.位置形参必须在默认参数的前面

    eg: 下面这种是错误

    def register(sex='male',name, age, sex='male'):  #错误,在pycharmdgdsfgasdf
        print(name, age, sex), 

    3.默认参数的值只在定义阶段赋值一次,也就是说默认参数的值再定义阶段就固定死了

    m = 10
    def foo(x, y=m):    #函数定义时,默认赋值   
        print(x, y)
    
    m = '20'        #测试 是否会影响函数的默认值
    foo(1)
    foo(1, 11)

    # 结果
    # 1 10
    # 1 11

    4.默认参数的值应该设置为不可变类型

    可变长参数

    在实际函数调用时,我们经常会遇到,传入实参个数不确定的情况

    应对这种情况,定义形参需要时用 *args,**kwargs 以用来接溢出的函数
    (args 与 kwargs  是起的名字,本身没有什么特殊含义,也可以定义为其他 的名字)形参里包含*与**

    *  会将溢出的位置实参全部接收,然后保存成元组的形式赋值给args

    def foo(x,y,z,*args): #args=(4,5,6,7,8)
        print(x,y,z)
        print(args)
    
    foo(1,2,3,4,5,6,7,8,)

    #结果:
    1 2 3
    (4, 5, 6, 7, 8)

    ** 会将溢出的关键字实参全部接收,然后保存成字典的形式赋值给kwargs

    def foo(x,y,z,**kwargs): # kwargs={'c':3,'a':1,'b':2}
        print(x,y,z)
        print(kwargs)
    
    foo(x=1,y=2,z=3,a=1,b=2,c=3)

    #结果:

    1 2 3
    {'a': 1, 'b': 2, 'c': 3}
  • 相关阅读:
    Tensorflow2.0语法
    Neural Networks and Deep Learning--Introduction to Deep Leraning
    机器学习---吴恩达---Week11(机器学习应用举例分析)
    机器学习---吴恩达---Week10(机器学习概述与单变量线性回归方程分析)
    机器学习---吴恩达---Week9_2(推荐系统)
    机器学习---吴恩达---Week9_1(异常检测)
    机器学习---吴恩达---Week8_2(非监督学习_PCA)
    机器学习---吴恩达---Week8(非监督学习_集群算法)
    机器学习---吴恩达---Week7(支持向量机学习SVM)
    机器学习---吴恩达---Week6_2(机器学习系统设计)
  • 原文地址:https://www.cnblogs.com/fixdq/p/8651191.html
Copyright © 2011-2022 走看看