昨日内容

函数的定义

只检测语法,不执行代码

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. .Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布

    .Net Core 跨平台:一个简单程序的多平台(windows.Linux.osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见Announcing ...

  2. 利用Python与selenium自动化模拟登陆12306官网!

    近年来,12306的反爬越来越来严重,从一年前的 获取tk参数后到现在增加了 JS.CSS等加密方式! 目前大部分人利用的登陆方式都是利用selenium ,此文也不例外. 环境:        Wi ...

  3. SSM框架手动实现分页逻辑(非PageHelper)

    第一种方法:查询出所有数据再分页 分析: 分页时,需要获得前台传来的两个参数,分别为pageNo(第几页数据),pageSize(每页的条数); 根据这两个参数来计算出前端需要的数据是查出数据list ...

  4. spring5 源码深度解析----- AOP目标方法和增强方法的执行(100%理解AOP)

    上一篇博文中我们讲了代理类的生成,这一篇主要讲解剩下的部分,当代理类调用时,目标方法和代理方法是如何执行的,我们还是接着上篇的ReflectiveMethodInvocation类Proceed方法来 ...

  5. asp.net core刷新css缓存

    在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...

  6. 04、JDBC范例

    范例:JDBC查询 package com.hsp; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  7. jmeter从获取token开始设计接口

    用自己实习时候的一个项目来实现一下获取token的接口测试 以登录dmp的学科列表为例子: 从登录开始,打开开发者选项 点击登录 在开发者窗口中network xhr Fildder中,看登录时的请求 ...

  8. 通过实例理解Java网络IO模型

    网络IO模型及分类 网络IO模型是一个经常被提到的问题,不同的书或者博客说法可能都不一样,所以没必要死抠字眼,关键在于理解. Socket连接 不管是什么模型,所使用的socket连接都是一样的. 以 ...

  9. 做高逼格程序员之说走就走的「Linux To Go 」

    简介:想拥有一个Linux,在自己的电脑上安装双系统太麻烦.想和WTG一样,随插随用. 使用LTG的好处 安装.修复系统:配置好后的Linux系统极其强大. 工作中我们同样可以使用这个系统,回到家里插 ...

  10. 我在用的翻译软件 -> 微软翻译+网易有道词典+谷歌翻译

    Windows网页翻译 因为微软翻译相对来说翻译网页更为准确,我也喜欢用谷歌的Chrome浏览器,但是我没找到微软翻译的扩展,这里只能放弃 这个需要配合Microsoft Edge浏览器进行使用,也是 ...