第十六课、函数

函数来了, 函数基础课程. 

一、函数是抽象的第一步
    1. 有关高压锅
    2. 函数是抽象出来的结构,是总结,是方法
    3. 多用函数 

二、如何定义函数
    1. def是关键词, 括号冒号永不忘, 无缩进无真相
    2. 没有return的函数,不是大丈夫 -- 不是真函数
    3. 不写doc的函数,就像没有性别的人类

    下面的函数不是真函数
    def test():
        print ‘422‘

    test()

    下面是比较好的方法:
    def test():
        ‘这是关于函数的描述‘
        return ‘422‘

    print test()
    print test.__doc__ 

三、函数的参数魔法和陷阱
    1. 如何定义参数
        1.1 位置参数, 可选参数

    # 位置参数 

    def test(a,b,c,d,e):
        "是关于函数的描述"

        # print a
        # print b
        # print c
        # print d
        # print e 

        return a,b,c,d,e

    print test(1,2,3,4,5)

    # 可选参数
    def test( a = 4):
        "是关于函数的描述"
        return a 

    print test(5)

    # 可选参数的应用方式 (伪代码)

    def test1(a,b,c,d,return_data = ‘json‘):
        if return_data == ‘json‘:
            return json(a,b,c,d)
        elif return_data == ‘xml‘:
            return xml(a,b,c,d)

    test1(a,b,c,d, return_data = ‘xml‘)

    2. 参数的值是局部变量
        2.1 参数只在函数内部有用
        2.2 全局变量介绍, 使用方法
        2.3 全局变量最讨厌

    b = 3 

    def a():
        # 将3赋值给全局变量b
        b = 4
        return b 

    def c():
        return b 

    def d():
        global b  # 能不用global尽量不要用
        b = 4
        return b 

    print b
    print a()
    print c()
    print d()
    print b 

    结果为  3,4,3,4,4 

    3. 参数默认值:方便引入不经常变化的值 或者 有时候需要根据应用的不同需要修改参数 

    4. 如何修改参数
        4.1 介绍
        4.2 这样修改参数实在太恶心

    b = [1,2,3]
    def fun1(l):
        l.append(4)
        return l

    # b 引入进去后,b就变化了,这样的方式非常危险, 不推荐这些样.
    fun1(b)
    print b 

    # 下面的写法是比较推荐的
    b = fun1(b) # 函数有返回值,返回值这样写比较好
    print b

    5. **和* 猩猩是字段, 星是元组 

    def test(**kr):
    return kr

    print test(a=1, b=2, c=3, d=4)  # 他会把所有的参数塞进kr这个字典里面去
    print test()

    def test(*z):
        return z

    print test(1,4,5,6,7,[1,4,5]) # 位置参数 

    结果:(1, 4, 5, 6, 7, [1, 4, 5]) 

    def test1(*z,**kr):
        return z, kr

    print test1(1,4,5,6,7,[1,4,5], a=4, b=9, c=6) # 返回键值以及位置参数组合成的元组
    结果:((1, 4, 5, 6, 7, [1, 4, 5]), {‘a‘: 4, ‘c‘: 6, ‘b‘: 9})

    # 用途:可以和很好地将你没有特别去设定的参数将它组合成一个可以被利用的变量,这就是** 和 *的意义

    print test1(a=4, 1,4,5,6,7,[1,4,5], b=9, c=6)  #错误,赋值不能放在前面
    print test1( 1,4,5,a=4,6,7,[1,4,5], b=9, c=6)  #错误 ,赋值不能放在中间,所以赋值只能放在右边.

    def test2(a,b,c,*z,**kr):
        return z, kr

    # print test2(1,2,3,4, a=4,g=1) #错误

    #正确, 赋值的变量不能和位置参数重复,这一点一定要注意.另外,赋值会按照顺序给到
    print test2(1,2,3,4,5,6,[1,2,3], f=4, g=1)  
时间: 2024-10-14 07:13:48

第十六课、函数的相关文章

python第四十六课——函数重写

3.函数重写(override) 前提:必须有继承性 原因: 父类中的功能(函数),子类需要用,但是父类中函数的函数体内容和我现在要执行的逻辑还不相符 那么可以将函数名保留(功能还是此功能),但是将函数体重构: 注意: 子类重写父类的函数,除了函数体以外的部分,直接复制父类的即可 演示函数重写的使用以及格式: class Fu: def test(self): print('九阳神功...') class Zi(Fu): def test(self): print('九阳神功...') supe

NeHe OpenGL教程 第三十六课:从渲染到纹理

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn

NeHe OpenGL教程 第四十六课:全屏反走样

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十六课:全屏反走样 全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据.看看吧,驱动程序为你做完了一切. 在图形的绘制中,直线的走样是非常影响美观的,我们可以使用反走样解决这个问题.在众多的解决

第十六课 数组的引入 【项目1-5】

第十六课 数组的引入 项目一 [数组大折腾] (1)创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行. [cpp] view plain copy print? int main( ) { int a[20]={...};  //初始化前10个元素 //键盘输入后10个元素的值 //由前往后输出数组中所有元素的值 printf("由前往后,数组中的值是:\n")

OpenGL教程翻译 第十六课 基本的纹理贴图

OpenGL教程翻译 第十六课 基本的纹理贴图 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) Background 纹理贴图就是将任意一种类型的图片应用到3D模型的一个或多个面.图片(也可以称之为纹理)内容可以是任何东西,但是他们一般都是一些比如砖,叶子,地面等的图案,纹理贴图增加了场景的真实性.例如,对比下面的两幅图片. 为了进行纹理贴图,你需要进行三个步骤:将图片加载到OpenGl中,定义模型顶点的纹理坐标(以对其进行贴图),用纹理坐标对图片进行

2018-08-24 第三十六课

第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合.数据管理 二十九 php的mongodb扩展 三十 php的mongo扩展 三十一 mongodb副本集介绍 三十二 mongodb副本集搭建 三十三 mongodb副本集测试 三十四 mongodb分片介绍 三十五 mongodb分片搭建 三十六 mongodb分片测试 三十七 mongodb备份

Python第十六课(模块3)

Python第十六课(模块3)    >>>思维导图>>>中二青年 模块与包 模块 """ 三种来源 1.内置的 2.第三方的 3.自定义的 四种表示形式 1.py文件(******) 2.共享库 3.文件夹(一系列模块的结合体)(******) 4.C++编译的连接到python内置的 """ 导入模块 """ 先产生一个执行文件的名称空间 1.创建模块文件的名称空间 2.执行模

Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击...................... 1 DoS............................................................................................................... 2 DDoS.......................

第十六课----Rsync数据同步工具

1.1.1 什么是Rsync?Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windows等多种操作系统平台.1.1.2 Rsync简介? Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以

进阶第十六课 Python模块之Pandas

转 同十五课,都是从大神那里转载的.今后会逐步增加示例代码. Pandas pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.pandas提供了大量能使我们快速便捷地处理数据的函数和方法. >>> from pandas import Series, DataFrame >>> import pandas as pd A.pandas 函数 说明 pd.