zoukankan      html  css  js  c++  java
  • 函数与模块

    函数与模块

    函数是能够某种特定功能的语句体集合,Python中存在大量的内置函数,调用以实现特定的功能,但是当这些内置函数不能实现我们想要的功能时,就需要自己定义函数实现,这种函数称为自定义函数。

    自定义函数

    自定义函数以def为标识,后跟函数名和参数列表,最后以return语句返回结果值,如果return语句缺省,则函数返回None值,格式如下:

    def 函数名(参数列表)

    函数体

    [return  返回值]

     

    最后一行调用myfun函数并输出结果,如果位于其他文件的语句需要调用这个自定义函数,则需要在文件开头使用语句 from function01 import myfun 或者 from function01 import * 导入该函数,即可调用此函数myfun。(function01为文件名)

    默认参数

    自定义函数可以使用默认参数,在自定义此方法时可以给出参数的默认值,在调用函数没给出参数的值时,会自动选择参数的默认值。

     

    当调用myfun函数时给全参数则完整传入,否则ab取默认值,只给一个参数,则相当于第一个参数。

    原则:

    1) 普通参数在前,默认参数在后,例如,def myfunxxa=3b=4);否则会抛出异常

    2) 调用函数时,未给出实参的默认参数取默认值,例如,myfun30),a=30b=4

    3) 调用函数时,仅给出部分与默认参数对应的实参时,默认参数依次取得实参值

    4) 调用函数时,给出指定默认参数的实参时,默认参数取指定的值,未给出或未指定实参的默认参数取默认值,例如myfun(b=10),a=3,b=10

    可变参数

    自定义函数可以使用可变参数,也就是说,可以从形参传入数量可变的实参。

     

    上述实例中,args为可变参数,可以接收若干个实参值,并将接收的值组装为一个元组。

    关键字参数

    可以给形参传入指定关键字和值的多组参数。

     

    kwargs为关键字参数,可以接收多组键值对,并将他们组装成一个字典。

    命名关键字参数

    函数只接收指定关键字参数的值,其余值不接收

     

     

    agecity为命名关键字参数,* 将必选参数与命名关键字参数分开。在调用此函数时传入命名关键字之外的参数会如上抛出异常。

    参数组合规则

    不同类型的参数进行组合时,参数出现的顺序必须按照必选参数,默认参数,可变参数,命名关键字参数和关键字参数的顺序出现;否则会出现错误。

     

    命名关键字参数d前面为可变参数c因此d前面不能出现分割符* ,关键字参数e的实参由kv提供,不能直接给出。

    实参与形参

    调用函数时,如果实参使用常量,则对应形参将的到相应的常量的值,如果实参使用变量,则对应形参将引用实参变量,使得形参变量与实参变量共享相同的内存单元值,直到形参重新赋值或者改变简单类型形参值时,才能触发给形参创建独立的内存空间,保存新值的机制。

     

    形参变量与实参变量的值与内存单元的地址完全一致,id()可以取得变量所在内存单元地址。

    形参重新赋值或者改变形参值时,形参变量和实参变量所共享的相同内存单元变化实例。

     

     

    myfun函数给形参xz重新赋值,使得形参xz不再与实参ac共享内存单元,但对y追加元素改变了y的值,未能改变yb共享内存单元的现状。

    递归

    递归就是函数可以直接或者间接调用自己

     

     

    模块

    使用python编程时不可避免会使用各种函数,为了对函数进行有效的管理。产生了模块的额概念。一个模块就是一个.py文件,其中包括一个或者多个函数,模块名就是.py不包含后缀的文件名。

     

    这就是一个模块,其中包含三个函数

    引入模块的方法通常有两种分别是import 模块”和“from 模块 import 函数”使用“import 模块”时,会引入模块中的所有函数,调用函数时也需要加上模块名

     

     

    使用“from 模块 import 函数” ,如果函数用* 表示,如“from module01 import * ,会引入模块中所有的函数;如果指明函数“from module01 import myfun,myfun2,会引入,module01中的函数myfun,myfun2,而myfun3不会被引入。用该方式引入的函数可直接调用     

     

    如果位于不同函数块的函数具有相同的函数名使用from 模块 import 函数”形式引入时,后引入模块中的函数才有效,因此如果不同的模块具有相同的函数名时,建议使用import 模块的形式引入。

    由于模块就是.py文件,模块名也有可能相同,并且对模块通常需要分门别类的管理,因此产生了包的概念(Package)。一个包就是包含一个或者多个模块的一个文件夹,其中包含文件__init__.py,文件__init__.py 在包被引入时做初始化操作,文件__init__.py可以为空,包也呈倒树状的结构。

    引入方法:

    例如,module01位于example文件夹中,引入module01的方法为“import example.module01” 或者 “from example.module01 import *” 或者“from example import module01

    使用import example.module01”引入,调用函数时需加上包名与模块名,如“example.module01.myfun(10,20)

    使用from example import module01”引入,调用函数需要加模块名与函数名,不需要加包名,如“module01.myfun(10,20)

                               

  • 相关阅读:
    系列之前端:从重复造轮子说起
    Asp.Net Core基于JWT认证的数据接口网关Demo
    通过编写一个简单的日志类库来加深了解C#的文件访问控制
    .net core 的图片处理及二维码的生成及解析
    svmtrain和svmpredict简介
    svm小问题
    SVM (support vector machine)
    ubuntu在windows下的wubi安装
    ubuntu在windows下的wubi安装
    [转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
  • 原文地址:https://www.cnblogs.com/plutozzl/p/11747583.html
Copyright © 2011-2022 走看看