美文网首页
Python编程:从入门到实践 Day8

Python编程:从入门到实践 Day8

作者: 欠欠的小跟班 | 来源:发表于2018-04-29 13:18 被阅读0次
    今天开始到函数了,每一天的都是按照书上的章节来的。。到函数就算是比较难了,所以大部分都是按照自己的理解来写的,毕竟书中有些文字还是不怎么好理解。

    第八章 函数

    1.定义

    函数就是带名字的代码块。

    def 函数名(参数):
             函数体
    

    2.实参与形参

    个人理解:

    形参:函数定义中的参数变量
    实参:函数调用时传递的参数变量
    

    3.传递参数

    位置参数:按照函数定义时的形参顺序来传递实参。
    关键字参数:将实参按照 名称—值  的形式传递给函数。
    

    相信下面这张图片可以说明两种参数的区别了

    image.png
    默认值:给形参一个默认值,若调用函数时未指定该参数,则使用默认值。
    
    image.png
    需要注意的是:
    (1)定义时必须将含默认值的参数放在未设置默认值的参数之后,否则程序会报错!SyntaxError: non-default argument follows default argument
    image.png
    (2)在函数调用时,含默认值的参数也是占一个位置的。
    所以在使用位置参数调用时,一定要注意位置!!!

    image.png

    4.返回值 :使用return

    函数使用return可以返回值,返回值可以是任何python的对象!!
    包括:数字、字符串、列表、字典甚至函数!
    这个问题在本文最末尾有资料。这里不详细讲,毕竟讲得没别人好!

    5.传递列表

    ①在函数中修改列表

    这里有一个比较重要的知识点:
    将列表作为参数传递给函数时,
    如果函数对列表进行了修改,那么,即使函数没有返回值,
    列表也会被修改!!!这些修改是永久的。

    image.png

    ②如何禁止函数修改列表

    方法就是:向函数传递列表的副本,而不是列表本身。
    采用我们之前学过的方法——切片。

    接着上面定义的函数,我们进行副本调用。

    调用时:change_lists(list_a[:],list_b)
    
    image.png
    如果不是很必要的情况下,最好还是将原始列表传递给函数。
    这样可以避免调用函数时需要花时间和内存来创建副本,从而提高效率。

    6.传递任意数量的实参:使用星号(*)

    ①结合使用位置实参和任意数量实参

    def 函数名(位置形参,*其他形参)
    注意:
    1.在其他形参名前面加一个星号(*)会让Python创建一个元组,元组名即这个带星号的形参名。
    2.与默认值参数一样,这个带星号的形参必须放在最后。
    3.Python在运行时,先匹配前面的位置实参或关键字实参,再将余下的参数都存储在这个元组中。
    
    image.png

    ①使用任意数量的关键字实参

    def 函数名(部分形参,**其他关键字形参)
    1.这个与上一个的区别在于,这个其他形参前面是两个星号(**)。
    2.在其他形参名前面加两个星号(**)会让Python创建一个字典,
    字典名即这个带两个星号的形参名。
    2.与默认值参数一样,这个带星号的形参必须放在最后。
    3.Python在运行时,会将没有定义的关键字形参都存储在这个字典中。
    
    image.png

    7.将函数存储在模块中

    将函数或多个函数存储在扩展名为.py的文件中,即为一个模板。
    如果要直接导入模板,则必须将模板放在主程序所在的目录下!

    导入模块/函数的几种方法:

    1.直接导入整个模块
    import 模块名
    **:调用时,需要使用句点(.)指定模块和函数。
    即:模块名.函数名()
    2.导入模块中的特定函数
    from 模块名 import 函数名
    (每次看到这一段,我一度怀疑设计者是中国人,
    因为这个语句和中文很相似:从 模块 中导入 函数)
    **:使用这种方法时,调用指定的函数时,不需要使用句点(.)指定模块,
    可以直接用函数名调用该函数。
    3.使用as给函数指定别名
    from 模块名 import 函数名 as 别名
    **:使用这种方法时,调用该函数就可以使用别名,这样避免与主函数中同名的函数混淆。
    4.使用as给模块指定别名
    from 模块名  as 别名
    5.导入模块中所有的函数
    from 模块名  import *
    **:使用这种方法时,调用该模块中的所有函数都不需要使用句点(.)指定模块名。
    这种方法不推荐,因为容易使模块中的函数名与项目中的函数混淆。
    

    8.函数编写指南

    这个实际上是一些约定:

    1.函数名最好是描述性的,能大体表述函数的功能,模块命名也一样;
    2.函数名只使用小写字母和下划线;
    3.给函数写一段简单的功能描述,
    使用文档字符串格式:即使用三个引号括起(左右均为```)
    紧跟在函数定义的下一行;
    4.给形参指定默认值时,等号(=)左右都不要有空格;
    5.在使用关键字实参调用函数时,等号(=)左右也都不要有空格;
    6.若在函数定义时,形参很多,导致一行无法写完,
    可以在函数定义中输入左括号(后
    按回车键,
    并在下一行按两次Tab键,
    这样可以将形参列表与只缩进一次的函数体区分开来;
    7.如果程序或模块包含多个函数,则使用两个空行将相邻函数分开;
    8.所有的import语句都放在文件开头,除非文件开头是注释。

    ——————————最后,分割一下——————————

    推荐一篇文章,是在公众号: Python那些事上面看到的,
    这篇文章将函数讲得很清楚,尤其是函数的调用和返回值。
    Python中其实一切皆对象
    这个概念很重要,这篇文章也讲得很清楚!
    https://mp.weixin.qq.com/s/DiP4PBTTPSh9fqGZZxJy2g

    相关文章

      网友评论

          本文标题:Python编程:从入门到实践 Day8

          本文链接:https://www.haomeiwen.com/subject/jaeolftx.html