昨日内容

函数的定义

只检测语法,不执行代码

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. ELK7.3实战安装配置文档

    整体架构   一:环境准备 1.环境规划准备 192.168.43.16 jdk,elasticsearch-master ,logstash,kibana 192.168.43.17 jdk,ela ...

  2. opencv边缘检测

    人眼怎么识别图像边缘? 比如有一幅图,图里面有一条线,左边很亮,右边很暗,那人眼就很容易识别这条线作为边缘.也就是像素的灰度值快速变化的地方. sobel算子 sobel算子是一个离散差分算子. 图像 ...

  3. pip换源

    PIP 下载慢,给你Python3的pip换个源 一键换源 文章来源:企鹅号 - 从零开始学习python 要实现一键换源需要安装一个模块 pip install pqi PQI相关命令 PQI获取当 ...

  4. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

    目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...

  5. java+maven+jenkins+svn构建

    操作参照:https://blog.csdn.net/qq_34977342/article/details/82346915 1.创建一个自由风格的项目,起名字 2.设置构建项目最大保存数量,与天数 ...

  6. java ThreadLocal使用

    1.源码分析 此处以JDK1.8版本分析 1.1 set方法 /** * Sets the current thread's copy of this thread-local variable * ...

  7. node环境及vscode搭建

    软件下载: nodejs https://nodejs.org/en/ vscode https://code.visualstudio.com/docs/?dv=win python-2.7.15 ...

  8. java 对数组进行截取组合操作

    1.使用skip跳过和limit限制组合,示例: Integer skip = (page.getPageNum() - 1) * page.getPageNum(); Integer limit = ...

  9. groupadd、groupmod、groupdel、gpasswd、newgrp

    1.groupadd [选项] 参数 添加组 -g:指定组ID -r:添加系统组 2.groupmod 修改组属性 -g :修改组ID -n:修改组名 3.groupdel 删除组 4.gpasswd ...

  10. Mysql高手系列 - 第21篇:什么是索引?

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第21篇. 本文开始连续3篇详解mysql索引: 第1篇来说说什么是索引? 第2篇详解Mysql中 ...