昨日内容

函数的定义

只检测语法,不执行代码

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. Java 基础篇之编程基础

    基本数据类型 java 是强类型语言,在 java 中存储的数据都是有类型的,而且必须在编译时就确定其类型. 基本数据类型变量存储的是数据本身,而引用类型变量存的是数据的空间地址. 基本类型转换 自动 ...

  2. ajax跨域问题以及解决方案

    转:https://blog.csdn.net/csdn_ds/article/category/6937392/3 在工作中,大家应该都遇到过ajax跨域问题,浏览器的错误如下: XMLHttpRe ...

  3. 10秒钟理解react生命周期

    慎点!这是一篇很水很水的文章, 抄自react中文文档, 本文详细介绍了react生命周期函数执行顺序, 以及各生命周期函数的含义和具体作用. 不同阶段生命周期函数执行顺序 挂载(Mounting) ...

  4. 问题:程序编译通过,但是执行时报错:coredump

    问题描述: 在一个客户现场搭建环境时,遇到了一个棘手的问题,C代码编译通过后,无法正常运行,启动会出现“coredump”错误. 运行环境为新搭建的AIX6.1,数据库为Oracle11.2.0.2. ...

  5. Mybatis基础知识点

    1. Mybatis框架优缺点 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系 ...

  6. .NET斗鱼直播弹幕客户端(上)

    现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎.斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆.看到有不少主播接入弹幕语音播报器.弹幕点歌等模块,这都需要首先连 ...

  7. bugku web8

    打开网站,是一段PHP代码, <?php extract($_GET); if (!empty($ac)) { $f = trim(file_get_contents($fn)); if ($a ...

  8. 0基础学Java快速扫盲指南,月入2W的基础

    学Java,掌握一些基本的概念是第一步,本文简单为大家介绍一些扫盲级别的内容,希望帮助小白快速入门. 一.基本概念 JVM:java虚拟机,负责将编译产生的字节码转换为特定机器代码,实现一次编译多处执 ...

  9. 全面系统Python3入门+进阶课程 ✌✌

    全面系统Python3入门+进阶课程 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 无论是大数据.人工智能还是机器学习,Python都是最热门的首选语言 ,这 ...

  10. 前端Vue知识小白

    感觉是已好久没写博文了.今日难得有时间,便写一篇文章.此文章是关于前端知识的,我本身是后端,因工作或其他需要,便学习了前端Vue.此文章是在菜鸟教程上学习的.那么下面进入正文! 首先,Vue.js是一 ...