s21day10 python笔记

一、函数补充

1.1 参数

  1. 基本参数知识
def get_list_date(aaa):       #aaa:形式参数(形参)  任意个数
    v = [11,22,33,44]
    print(v[aaa])

get_list_date(1)             #1:实际参数(实参)   任意类型
  1. 位置传参(传参:调用函数并传入参数)

    • 要求:严格按照位置进行传参

    • 位置参数:positional argument

    • 基本形式

      def func(a,b):
          print(a,b)
      
      func(11,22)               #位置都是一一对应的,a = 11,b = 22
  2. 关键字传参

    • 关键字参数:keyword argument

    • 基本形式

      def func(a,b):
          print(a,b)
      
      func(b = 11,a = 22)        #按照关键字进行传参,可以交换位置
    • 注意:open(打开文件)是python内部写好的一个函数,运用的就是关键字传参

    • 关键字传参和位置传参可以混合使用

      • 位置参数必须在关键字参数的前面
      • 位置参数的个数 + 关键字参数的个数 = 总参数个数
      • 一个参数不能传多次
  3. 默认参数:可传可不传

    • 基本形式

      def func(a,b = 9):          #b就是默认参数,默认值为9
      #func函数接受两个参数,调用函数进行传值时,默认参数可传可不传,不传则使用默认值,传则使用传的值
          print(a,b)
      
      func(123)                   #a = 123,b使用默认值,即b = 9
      func(11,22)                 #a = 11,b = 22
    • 对于默认值,如果是可变类型(明日补充)

  4. 万能参数

    • *args

      • 可以接受任意个数的参数,并将参数转化为元组(注意实参里有*和没有的区别)
      • 只能使用位置传参
      • 基本形式
      def func(*args):
          print(args)
      
      func(1,2)                #args = (1,2)
      func((11,22,33))         #args = ((11,22,33),)
      func(*(11,22,33))        #args = (11,22,33)       循环元组里的元素,加入到元组中
      func(*[11,22,33,44])     #args = (11,22,33,44)    循环列表里的元素,加入到元组中
      #注意实参里有*和没有的区别
      
      #特殊情况:
      def func(a,*args,b):     #a只能使用位置参数,b只能使用关键字参数
          print(a,args,b)
      
      func(1,2,3,4,b = 5)      #a = 1,args = (2,3,4),b = 5  
    • **kwargs

      • 可以接受任意个数的参数,并将参数转化为字典(注意实参里有**和没有的区别)
      • 只能使用关键字传参
      • 基本形式
      def func(**kwargs):
          print(kwargs)
      
      func(k1 = 1,k2 = 'alex')          #kwargs = {'k1':1,'k2':'alex'}
      func(**{'k1':'v1','k2':'v2'})     #kwargs = {'k1':'v1','k2':'v2'}
      #注意实参里有**和没有的区别  
    • 综合运用(*args和**kwargs一起使用)

    def func(*args,**kwargs):
        print(args,kwargs)
    
    func(1,2,3,4,k1 = 1,k2 = 2)              #args = (1,2,3,4),kwargs = {'k1':1,'k2':2}
    func(*[1,2,3],**{'k1':'v1','k2':'v2'})   #args = (1,2,3),kwargs = {'k1':'v1','k2':'v2'} 
  5. 参数相关重点

    • 定义函数

      #情况一:
      def func(a,b):
          pass
      
      #情况二:
      def func(a,b = None):
          pass
      
      #情况三:
      def func(*args,**kwargs):
          pass
    • 调用函数:位置参数 > 关键字参数

1.2 返回值

  1. 作用

    • 返回值
    • 终止函数的执行
  2. 基本形式
def func(arg):
    代码             #函数内容
    return 9         #返回值为9,默认:return None

val = func('ads')    #设置一个变量接收返回值

#特殊情况:
def func():
    return 2,3,'alex'     #返回是一个元组

val = func()
print(val)                #(2,3,'alex')
  1. 返回值相关重点

    • 函数没有返回值,默认返回:None
    • 函数内部执行过程中一旦遇到return就终止
    • return可以返回任意类型

二、作用域

2.1 分类

  • 全局作用域:在python中,相当于一个py文件

    • 全局作用域中的变量称为全局变量
    • 全局变量必须全用大写
  • 局部作用域:在python中,相当于一个函数

    • 局部作用域中的变量称为局部变量
    • 局部变量则用小写
    USER_LIST = [11,22,3]         #全局变量
    def func():
        name = 'asdf'             #局部变量
        USER_LIST.append(12)
        USER_LIST.append(name)
    func()
    print(USER_LIST)

2.2 总结

  • 在python中,一个函数就是一个作用域

  • 作用域中查找数据规则:

    • 优先在自己的作用域里找数据
    • 自己没有就去 '父级' 中找,没有就去 '父级' 的 '父级' 中找,直到找至全局作用域
    • 如果最后全局作用域中也没有,就会报错
    • 寻找时注意:父级作用域中的值到底是什么
    #示例一:
    x = 10
    def func():
        x = 9
        print(x)
        def x1():
            x = 8
            print(x)
    func()               # 9
    
    #示例二:
    x = 10
    def func():
        x = 9
        print(x)
        def x1():
            x = 8
            print(x)
        x1()
    func()               # 9   8
    
    #示例三:
    x = 10
    def func():
        x = 9
        print(x)
        def x1():
            x = 8
            print(x)
        print(x)
        x1()
    func()               # 9   9   8   
    
    #示例四:
    x = 10
    def func():
        x = 9
        print(x)
        def x1():
            x = 8
            print(x)
        x1()
        print(x)
    func()               # 9   8   9 
    
    #示例五:
    x = 10
    def func():
        x = 9
        print(x)
        def x1():
            print(x)
        x1()
        print(x)
    func()               # 9   9   9
    
    #示例六:
    x = 10
    def func():
        x = 8
        print(x)
        def x1():
            print(x)
        x = 9
        x1()
        x = 10
        print(x)
    func()               # 8   9   10
    
    #示例七:
    x = 10
    def func():
        x = 8
        print(x)
        def x1():
            print(x)
        x1()
        x = 9
        x1()
        x = 10
        print(x)
    func()               # 8   8   9   10
  • 对于子作用域:

    • 只能找到 '父级' 中的值,默认无法重新为 '父级' 的变量进行赋值

    • 如果非要对变量进行重新赋值,使用 global / nonlocal 进行强制赋值

      • global:直接找到全局的变量,再进行重新赋值,其他的不更改
      • nonlocal:只找到 '父级' 的变量,进行重新赋值,其他的不更改
      • 建议:一般不要使用,以免造成代码混乱
      #global示例:
      name = 'oldboy'
      def func():
          name = 'alex'
          def inner():
              global name      #直接找到全局的name
              name = 'abc'     #再进行重新赋值
          inner()
          print(name)          #'alex'
      func()
      print(name)              #'abc'
      
      #nonlocal示例:
      name = "oldboy"
      def func():
          name = 'alex'
          def inner():
              nonlocal name    #找到上一级的name
              name = 'abc'     #再进行重新赋值
          inner()
          print(name)          #'abc'
      func()
      print(name)              #"oldboy"

s21day10 python笔记的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. 尚硅谷面试第一季-18ES与Solr的区别

    背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器.[是因为他们都是基于分词技术构建的倒排索引的方式进行查询] 开发语言:Java语言开发 诞生时间:Solr ...

  2. Linux内核 kmalloc, kzalloc & devm_kzalloc 区别【转】

    本文转载自:https://blog.csdn.net/u014628531/article/details/50711409 首先,kzalloc()实现了kmalloc()+memset()的功能 ...

  3. 获取Tomcat更详细的日志

    前言 有时候tomcat报错未详细,未能定位到原因. 解决方法: 获取更详细的日志,以便调试. 详细步骤:   获取详细的日志,方法如下: 在WEB-INF/classes目录下logging.pro ...

  4. Something on RoIAlign --- basic introduction and implementation

    Something on RoIAlign --- basic introduction and implementation 2018-10-22 22:40:09 Paper: Mask RCNN ...

  5. spring 事务的七中传播行为五中隔离

    事务的传播行为(七): public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS ...

  6. Redis学习--Redis数据类型

    Redis的5种基本类型 1.String 2.Hash 3.List 4.Set 5.Sorted Set String常见用法 1.get key 返回value 2.set key value ...

  7. 第 8 章 容器网络 - 066 - Weave 如何与外网通信?

    Weave 与外网通信 weave 是一个私有的 VxLAN 网络,默认与外部网络隔离. 外部网络如果要访问到 weave 中的容器:1.首先将主机加入到 weave 网络.2.然后把主机当作访问 w ...

  8. 调用系统命令 os.system()和os.popen()

    Python中os.system和os.popen区别 Python调用Shell,有两种方法:os.system(cmd)或os.popen(cmd)脚本执行过程中的输出内容.实际使用时视需求情况而 ...

  9. React文档(十一)提升state

    经常有些组件需要映射同一个改变的数据.我们建议将共用的state提升至最近的同一个祖先元素.我们来看看这是怎样运作的. 在这一节中,我们会创建一个温度计算器来计算提供的水温是否足够沸腾. 我们先创建一 ...

  10. jQuery 省份选择

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...