函数Ⅱ(参数&作用域)

  • 知识小结:

    • py2与py3的区别

    • 逻辑运算()>not>and>or

    • 字符串翻转切片翻转

    • is与==区别

    • git相关

    • 数据类型判断

    • 操作系统:centos,redhat

    • 数据类型的操作方法

    • 深浅拷贝

    • 大文件(日志文件)读取

    • 一行写成99乘法表

1.参数

  • 实际参数可以是任何值

  • 函数没有返回值,默认返回None

  • 函数内部执行时,遇到return就终止运行

  • return可以返回任何数据类型的值,多个值时返回元组

    # enconding: utf-8
    def test():
       return 1,2,3
    print(test()) #(1, 2, 3)

1.传参

  • 传参:调用函数并传递参数,实参与形参必须一一对应

  • 位置传参:严格按照位置先后顺序传参

  • 关键字传参:直接赋值传参,无先后顺序

  • 混合传参:位置参数与关键字参数混合使用,位置参数一定在关键字参数之前

    def func(a1, a2):
    print(a1, a2)
    func(a2=99,a1=2)
    # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
    def func1(a1, a2, a3):
    print(a1, a2, a3)
    # func(1, 2, a3=9)
    # func(1, a2=2, a3=9)
    # func(a1=1, a2=2, a3=9)
    # func(a1=1, 2,3) # 错误

2.默认参数

  • 默认参数:在函数建立时定义好的参数.

  • 默认参数可传可不传.不传参使用默认值,传递参数相当于重新对默认参数赋值.

3.*参数 万能参数(打散)

  • (*args)只接收位置参数

  • 格式(*参数)可以接收多个参数,但是只支持位置传参

  • 实参传递到形参时是以元组形式传递

  • 传参时实参前加星(*实参),先把实参打散,再传参到形参

    def func(*args):
    print(args)
    # func(1)
    # func(1,2)
    func(1,2) # args=(1, 2)
    func((11,22,33,44,55)) # args=((11,22,33,44,55),)
    func(*(11,22,33,44,55)) # args=(11,22,33,44,55)

4.**参数 万能参数

  • **(kwargs)

  • 只接收关键

  • 字参数

  • 实参传递到形参时是以字典形式传递{'k'=v}

  • 传参时实参前加**,直接传递字典

    def func(*args,**kwargs):
    print(args,kwargs)
    # func(1,2,3,4,5,k1=2,k5=9,k19=999)
    func(*[1,2,3],k1=2,k5=9,k19=999)
    func(*[1,2,3],**{'k1':1,'k2':3})
    func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})

注意:一般*args与**kwargs一起使用,这是超级无敌万能参数

参数重点总结

1.常见形参模式:

def func1(a1,a2):
pass
def func2(a1,a2=None):
pass
def func3(*args,**kwargs):
pass

2.位置参数永远在关键字参数之前!

2.作用域scope与函数嵌套

  • 作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

  • python

    • 一个py文件是一个全局作用域

    • 一个函数是一个作用域

  • 作用域中查找数据规则:优先查找自己局域内数据,自己没有再去父级作用域查找,以此类推,可以找到,可以修改,不能为父级作用域的变量重新赋值.

  • global '全局,全球'强制更改全局作用作用域 ,先global+变量,再对变量赋值

  • nonlocal '外地' 强制更改父级作用域变量 ,先nonlocal+变量,再对变量赋值

    # 示例一
    name = ["老男孩",'alex']
    def func():
       global name
       name = '我'
    func()
    print(name)
    # ############################## nonlocal
    name = "老男孩"
    def func():
       name = 'alex'
       def inner():
           nonlocal name # 找到上一级的name
           name = 999
       inner()
       print(name)
    func()
    print(name)
  • 全局作用域:全局作用域内的数据公用

    • 全局变量全部大写

  • 局部作用域:局部作用域可以使用全局作用域内的数据,但是全局作用域使用不了局部作用域的数据即

    • 局部变量正常变量定义

  • 函数的作用域链:小范围作用域可以使用大范围的变量,但是反之不行,他是单向的。

  • 函数内只可以调用全局作用域的函数

    # x = 10
    # def func():
    #     x = 9
    #     print(x)
    #     def x1():
    #         x = 999
    #         print(x)
    #     print(x)
    #     x1()
    #
    # func()

    # x = 10
    # def func():
    #     x = 8
    #     print(x)
    #     def x1():
    #         x = 999
    #         print(x)
    #     x1()
    #     print(x)
    #
    # func()


    # x = 10
    # def func():
    #     x = 8
    #     print(x)
    #     def x1():
    #         print(x)
    #     x1()
    #     print(x)
    #
    # func()



    # x = 10
    # def func():
    #     x = 8
    #     print(x)
    #     def x1():
    #         print(x)
    #     x = 9
    #     x1()
    #     x = 10
    #     print(x)
    #
    # func()

总结

  • 参数

    • 调用(执行)函数时,传参:位置参数 > 关键字参数

    • 定义函数:

      • def func(a)

      • def func(a,b=None) # 对于默认值,如果是可变类型,----> 坑。

      • def func(*args,**kwargs)

  • 作用域

    • 函数为作用域

    • 自己 > 父级 > 父级 > 全局 【读/修改(可变)】

    • 重新赋值:

      • global 全局

      • nonlocal 外层

python学习day10 函数Ⅱ(参数&作用域)的更多相关文章

  1. Python进阶(二)----函数参数,作用域

    Python进阶(二)----函数参数,作用域 一丶形参角度:*args,动态位置传参,**kwargs,动态关键字传参 *args: ​ 动态位置参数. 在函数定义时, * 将实参角度的位置参数聚合 ...

  2. python学习Day10 函数的介绍(定义、组成、使用)

    今日学习内容: 1.什么是函数 :函数就是一个含有特定功能的变量,一个解决某问题的工具 函数的定义:通过关键字def + 功能名字():代码体(根据需求撰写代码逻辑) 2.为什么要用函数:可以复用:函 ...

  3. Python学习之函数参数

    上一节,我们学习了Python中是如何定义和调用函数且如何得到返回值的.在调用函数时,有的函数需要参数来启动函数,有的则无需参数.这一节我们来介绍Python中有哪些参数类型. 位置参数 在调用函数时 ...

  4. Python学习笔记 - 函数参数

    >>> def power(x): ... return x * x ... >>> power(5) 25 >>> def power(x, n ...

  5. python学习 04 函数参数

    1.参数可以传递元组,但是要加* 2.参数可以传递字典,但是要加**

  6. python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

    python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...

  7. Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器

    Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: ​ 1. 可以在局部作用域声明一 ...

  8. python学习8—函数之高阶函数与内置函数

    python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...

  9. Python学习-函数,函数参数,作用域

    一.函数介绍 函数定义:函数时组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 我们已经知道python提供了许多内建函数,print(), type()等.我们也可以自己创建函数,这被叫 ...

随机推荐

  1. linux下磁盘存储空间不足

    把自己平时遇到的问题分享给大家 Question:linux系统Ubuntu下面有一个Trash,当我们删除文件后,清空Trash,过一段时间发现磁盘空间不足 Answer:其实我们并没有真正的删除文 ...

  2. Asp.Net登陆记住用户功能实现

    1.效果和原理 原理是利用Asp.net的Cookies.选中CheckBox,把输入的用户名和密码用Cookies存储起来,设置过期时间7天,超过时间自动清除Cookie信息. 2.前台代码 < ...

  3. FPGA配置OV5640摄像头及RGB图像数据采集

    本文设计思想采用明德扬至简设计法.在做摄像头数据采集处理之前,需要配置OV5640传感器内部寄存器使其按要求正常工作,详细内容请参见<OV5640自动对焦照相模组应用指南>.首先要关注OV ...

  4. LeetCode算法题-Assign Cookies(Java实现)

    这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...

  5. Gitlab利用Webhook实现Push代码后的jenkins自动构建

    之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布.这种方式每次在发版的时候,需要人工去执行je ...

  6. django--use

    https://docs.djangoproject.com/zh-hans/2.0/intro/

  7. git 忽略 .idea文件

    多人开发时,会出现明明在gitignore中忽略了.idea文件夹,但是提交时仍旧会出现.idea内文件变动的情况 原因.idea已经被git跟踪,之后再加入.gitignore后是没有作用的 解决办 ...

  8. linux 下 命令行中运行 selenium chrome 问题

    1.chrome 现在不允许使用root运行了. 2.无界面 chromedriver 调用chrome 会出错. <另外一定要匹配 chromedriver和chrome 的版本. 要不会出各 ...

  9. 使用PowerDesigner 15对现有数据库进行生成图表结构

    PowerDesigner的安装和基本使用,我就不阐述了.大家可以到这里看看:http://www.blogjava.net/wangdetian168/archive/2011/04/07/Powe ...

  10. 学号 20175329 2018-2019-3《Java程序设计》第八周学习总结

    学号 20175329 2018-2019-3<Java程序设计>第八周学习总结 教材学习内容总结 第十五章 泛型 可以使用"class 名称"声明一个类,为了和普通的 ...