昨日内容

函数的定义

只检测语法,不执行代码

def 函数名():
    代码

函数的三种定义方式

空函数

有参函数

无参函数

函数的调用

函数的返回值

  1. return可以返回值,默认返回None,rentun后面不加东西也返回None
  2. return可以终止函数,有多个return,执行到第一个就终止
  3. return可以返回多个值,以元组形式返回

函数的参数

形参

接受实参,具有描述意义

位置形参

从左到右依次接收位置实参

默认形参

  1. 默认值,如果传参,使用传参的值,否则使用默认值(形参会多次使用同一个值)
  2. 默认形参必须放在位置形参后面

实参

具体的值,传参给形参

位置实参

从左到右依次传参给位置形参

关键字实参

  1. 按照形参名传参(参数较多使用)
  2. 关键字实参必须得在位置实参的后面

今日内容

可变长参数

可变长形参

*形参名

def f1(*a): # 调用函数时,有多少个位置实参,就接受多少个参数
    print(a)

f1()  # a是空元组
f1(1) # (1, )
f1(1,2)  # (1,2)

*args(约定俗成),用元组接收多余的位置实参

**形参

def f1(**kwargs): #
    print(kwargs)

f1()  # 空字典
f1(x = 1) # {x:1}
f1(1,2)  # (1,2)

**kwargs,用字典接受多余的关键字实参

def f1(*args,**kwargs):
    print(args,kwargs)

f1(11,1,12,x = 1,x=2)

可变长实参(仅作了解)

*实参

def f1(a,b,c,d,e,f):
    print(a,b,c,d,e,f)

lt= [1,2,3,4,5,6]
# f1 = (lt[0],lt[1],lt[2],lt[3],lt[4],lt[5],lt[6])
f1(*lt)  # *lt把列表中的元素打散成位置实参依次传给位置实参

**实参

def f1(*args,*kwargs):  # 可接受所有类型
    print(args,kwargs)

def g1(a,b):
    print(a,b)

dic = {'a':1,'b'=2}
g1(**dic)  # a = 1,b = 2
f1(**dic)  # **dic把字典打散成关键字实参传给函数

函数对象

python中一切皆对象

s = '12'
  1. 引用

    s1 = s
  2. 容器元素

    lt = [s]
  3. 作为函数的实参

    def f1(x):
        print(x)
    
    f1(s)    
  4. 作为函数的返回值

    def f1(s):
        return s 
    
    s2 = f1(s)

字典/列表/元组/集合/布尔值,所有对象都可以以上四件事情

  1. 引用

    def f1():
        print('from f1')
    
    # 函数对象 = 函数名
    
    func = f1
    func()  # f1()
  2. 当作容器元素

    lt = [f1,1,2,3]
    
    lt[0]()  # f1()
  3. 当作函数实参

    def f2(f2_f1):
        print(f2_f1)
        f2_f1()
    
    f2(f1)
    
    print(f1)
    
  4. 做函数的返回值

    def f2(f2_f1):
        return(f2_f1)
    
    res = f2(f1)  #f1
    
    res()  # f1()

函数嵌套

函数内部定义的函数,外部不能用

名称空间和作用域

名称空间

变量名/函数名都叫名称

名称空间:专门存储名称

  1. 内置名称空间(存储内置方法名称)

    数据自带内置方法,python解释器自带内置方法(print/len)

  2. 全局名称空间:除了内置和局部

    def f1():
        x =10
    
    y = 10
    lt = [1,2,3]
  3. 局部名称空间:函数内部定义的

  • 名称空间的执行(生成)顺序

    1. 内置名称空间:python解释器启动就会有
    2. 全局名称空间:执行代码时候才会有
    3. 局部名称空间:函数调用的时候才会有局部
  • 搜索顺序:先从当前所在位置搜索,找不到再按照局部>全局>内置>报错的顺序,不会逆向寻找

作用域

全局作用域

内置名称空间+全局名称空间

局部作用域

局部名称空间

  1. 全局作用域的x和局部作用域的x没有关系

  2. 局部作用域1的x和局部作用域2的x也没有关系,即使局部作用域1和局部作用域2在同一个局部

了解

  1. global:打破了上述第一点规则

    x= 10 
    
    def f1():
        global x  # 让global以下局部的x变成全局
        x = 20
    
    f1()
    print(x)  # 20
  2. nonlocal:打破上述第二点规则

    def f1():
        def f2():
            def f3():
                nonlocal x  # nonlocal让x成为顶层函数的局部,但是不能成为全局
    
                x = 1
            x = 2
            f3()
        f2()            

python3中,所有可变数据类型均可打破上述一切规则

lt = [10]

def f1():
    lt[0] = 11

f1()
print(lt)   # [11]
    
  • 拓展(面试题)
def f1(i,lt=[]):
    lt.append(i)
    print(lt)

for i in range(3):
    f1(i)

[0]

[0,1]

[0,1,2]

def f1(i,lt):
    lt.append(i)
    print(lt)

fori in range(10):
    f1(i,[])

[0]

[1]

[2]

函数基础(二)(day11整理)的更多相关文章

  1. Less-mixin函数基础二

    //mixin函数 基础使用方法 --包含选择器,example: .test(){ &:hover{ border:1px solid red; } } button{ .test; } / ...

  2. python 18 函数基础二

    转自 http://www.cnblogs.com/BeginMan/p/3173328.html 一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装 ...

  3. 函数基础(一)(day10整理)

    目录 昨日内容 文件的基本应用 什么是文件 操作文件的流程 打开文件的三种模式 文件打开的两种方式 绝对路径和相对路径 绝对路径 相对路径 with管理文件上下文 文件的高级应用 新的打开文件的模式 ...

  4. PHP基础入门(二)【PHP函数基础】

    PHP基础入门(二)--函数基础 了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础. 这部分主要讲的就是: 函数的声明与使用.PHP中变量的作用域.静态变量.函数的参数传递.变量函数 ...

  5. SVG.js 基础图形绘制整理(二)

    一.折线 var draw = SVG('svg1').size(300, 300); //画折线 //使用字符串点 // var polyline=draw.polyline('0,0 100,50 ...

  6. LR函数基础(一)(二)

    LR函数基础(一) 函数用到:web_reg_find(). lr_log_message(). lr_eval_string().strcmp().atoi() Action(){    web_r ...

  7. jdbc基础 (二) 通过properties配置文件连接数据库

    csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...

  8. Python 函数基础、有序集合、文件操作(三)

    一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...

  9. 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归

    一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...

随机推荐

  1. 导出 mysql 数据到 redis

    决定你要导入到 redis 的数据类型 假设我的表 t_user 的结构为 列名 注释 类型 name 名称 varchar idcard 身份证号 varchar phone 手机号 varchar ...

  2. JDBC对Mysql utf8mb4字符集的处理

    写在前面 在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置 当前项目是JAVA编写, 使用JDBC连接操作数据库, 如下针对的JDBC ...

  3. 设计模式-Builder和Factory模式区别

    Builder和Factory模式区别 Builder模式结构: Factory模式一进一出,Builder模式是分步流水线作业.当你需要做一系列有序的工作或者按照一定的逻辑来完成创建一个对象时 Bu ...

  4. QT两个窗口相互切换

    信号(signals)与槽(slots)是QT重要机制,例子使用了C++11 lambda表达式进行了信号与槽的连接. 实现两个窗口通过点击按钮完成互相切换,注意子窗口只能发送信号,不能处理,所有信号 ...

  5. for for in 给已有的li绑定click事件生成新的li也有click事件

    想要给已有的li元素绑定一个click事件,点击生成新的li元素,并且新的li元素也要有click事件 //不能用for循环给每个li绑定click事件 因为这样的话 后面新生成的li就没有click ...

  6. 使用 .gitignore 忽略 Git 仓库中的文件

    .gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或 ...

  7. 使用Docker安装FastDFS(分布式文件系统)

    1. 获取镜像 可以利用已有的FastDFS Docker镜像来运行FastDFS. 获取镜像可以通过下载 docker image pull delron/fastdfs 也可是直接使用提前下载的镜 ...

  8. 解决mac OSX下安装git出现的"git命令需要使用开发者工具。您要现在安装该工具吗"(19款Mac)

    1.本地安装Git ,这里不做说明 2.命令行执行 sudo mv /usr/bin/git /usr/bin/git-system 3.如果提示 权限不足,操作不被允许,关闭Rootless,重启按 ...

  9. ping本地局域网

    #!/bin/bash for i in `seq 1 254` do ping -c 1 192.168.192.$i > /dev/null if [ $? -eq 0 ];then ech ...

  10. beego之操作model

    beego之操作model 1.环境配置 1>.下载安装orm go get github.com/astaxie/beego/orm 默认安装路径在gopath路径下,可使用go env查看路 ...