今日内容

  1. 参数

  2. 作用域

  3. 函数嵌套

知识点回顾

函数基本结果

  1. def func(name,age,email):
  2. # 函数体(保持缩进一致)
  3. a = 123
  4. print(a)
  5. return 1111#函数中,出现return后,后面的语句不再执行。
  6. b = 456
  7. print(b)
  8. result = func(1,2,3)
  9. # 函数默认返回值:None

参数

  1. def func(n1,n2):
  2. print(n1,n2)
  3. func(1,2)
  4. func(1,[11,22,3])
  5. func({'k1':'k'},[11,22,3])
  6. # 严格按照顺序传参数:位置方式传参。
  7. # 实际参数可以是任意类型。

返回值

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

  • 函数内部执行过程中遇到return,就终止。

    def func1():

    return "完成" # 函数每次执行到此,就返回;所以下面代码永远不执行。

    for i in range(10):

    print(i)

    func1()

    1. def func2():
    2. for i in range(10):
    3. print(i)
    4. return "完成"
    5. print(666)
    6. func2()
  • return 可以返回任意类型

    def func():

    return (1,2,3)

    1. v = func()
    2. print(v)
    3. # 特殊:返回元组
    4. def func():
    5. return 5,8,"alex"
    6. v = func()
    7. print(v)

昨日作业题

  1. def func(data_list):
  2. val = data_list[1::2]
  3. return list(val)
  4. v1 = func([1,2,3,4,5,5])
  5. print(v1)
  6. v2 = func((1,2,3,4,5,5))
  7. print(v2)
  8. # 其他类型可以通过强制转换为列表
  9. # v1 = (1,2,3,4)
  10. # v1 = {1,2,3,4}
  11. # v1 = {'k1':'v1','k2':'v2'}
  12. v1 = "asdfasdfasdf"
  13. v2 = list(v1)
  14. print(v2)
  15. def func(arg):
  16. if len(arg) > 5:
  17. return True
  18. else:
  19. return False
  20. data = func([1111,22,3,42,12])
  21. data = func((1111,22,3,42,12)
  22. def func(a1,a2):
  23. if a1 > a2:
  24. return a1
  25. else:
  26. return a2
  27. v1 = func(1,2)
  28. v2 = func(11,2)
  29. def func(a1,a2):
  30. return a1 if a1 > a2 else a2
  31. v1 = func(1,2)
  32. v2 = func(11,2)
  33. def func(name,gender,age,edu):
  34. # template = "%s*%s*%s*%s" %(name,gender,age,edu,)
  35. # return template
  36. data_list = [name,gender,age,edu]
  37. return "*".join(data_list)
  38. n1 = input('>')
  39. n2 = input('>')
  40. n3 = input('>')
  41. n4 = input('>')
  42. result = func(n1,n2,n3,n4)
  43. print(result)
  44. def func(max_range):
  45. result = [1,1]
  46. while True:
  47. val = result[-1] + result[-2]
  48. if val > max_range:
  49. break
  50. result.append(val)
  51. return result
  52. v = func(100)
  53. print(v)
  54. def func(name):
  55. with open('data.txt',mode='r',encoding='utf-8') as obj:
  56. # 方式一
  57. content = obj.read()
  58. flag = False
  59. row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
  60. for row in row_list:
  61. v= row.split('|')
  62. if v[1] == name:
  63. flag = True
  64. break
  65. return flag
  66. func('alex')
  67. func('eric')
  68. # ############################################
  69. def func(name):
  70. with open('data.txt',mode='r',encoding='utf-8') as obj:
  71. # 方式一
  72. content = obj.read()
  73. row_list = content.split('\n') # ['1|alex|123123','2|eric|rwerwe','3|wupeiqi|pppp']
  74. for row in row_list:
  75. v= row.split('|')
  76. if v[1] == name:
  77. return True
  78. v1 = func('alex')
  79. if v1:
  80. print('存在')
  81. else:
  82. print('不存在')

今日内容详细

  1. 参数

  2. 基本参数知识

    • 任意个数

    • 任意类型

      def func(a1,a2,a3):

      print(a1,a2,a3)

      func(1,"asdf",True)

  3. 位置传参(调用函数并传入参数)【执行】

    def func(a1,a2):

    print(a1,a2)

    1. func(1,3)
  4. 关键字传参【执行】

    def func(a1, a2):

    print(a1, a2)

    1. func(a2=99,a1=2)
    2. # 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
    3. def func1(a1, a2, a3):
    4. print(a1, a2, a3)
    5. # func(1, 2, a3=9)
    6. # func(1, a2=2, a3=9)
    7. # func(a1=1, a2=2, a3=9)
    8. # func(a1=1, 2,3) # 错误
  5. 默认参数【定义】

    def func(a1,a2,a3=9,a4=10):

    print(a1,a2,a3,a4)

    1. func(11,22)
    2. func(11,22,10)
    3. func(11,22,10,100)
    4. func(11,22,10,a4=100)
    5. func(11,22,a3=10,a4=100)
    6. func(11,a2=22,a3=10,a4=100)
    7. func(a1=11,a2=22,a3=10,a4=100)
  6. 万能参数(打散)

    • *args

      • 可以接受任意个数的位置参数,并将参数转换成元组。

        • 调用函数无 *

          def func(*args):

          print(args)

          1. func(1,2,3,4)
          2. (1, 2, 3, 4)
        • 调用函数有 *

          def func(*args):

          print(args)

          1. func(*(1,2,3,4))
          2. func(*[1,2,3,4])
          3. (1, 2, 3, 4)
          4. (1, 2, 3, 4)
      • 只能用位置传参

        def func(*args):

        print(args)

        1. # func(1)
        2. # func(1,2)
        3. func(1,2) # args=(1, 2)
        4. func((11,22,33,44,55))
        5. # args=((11,22,33,44,55),),不带星号,相当于把当当成一个整体,当作元组的一个元素。
        6. func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
        7. (1,)
        8. (1, 2)
        9. (1, 2)
        10. ((11, 22, 33, 44, 55),)
        11. (11, 22, 33, 44, 55)
    • **kwargs

      • 可以接受任意个数的关键字参数,并将参数转换成字典。

        • 调用函数无 **

          def func(**kwargs):

          print(kwargs)

          1. func(k1=1,k2="alex")
          2. {'k1': 1, 'k2': 'alex'}
        • 调用函数有**

          def func(kwargs):

          print(kwargs)

          func(
          {'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}

      • 只能用关键字传参

      • 综合应用:无敌 + 无敌 => 真无敌

        def func(*args,**kwargs):

        print(args,kwargs)

        1. # func(1,2,3,4,5,k1=2,k5=9,k19=999)
        2. func(*[1,2,3],k1=2,k5=9,k19=999)
        3. func(*[1,2,3],**{'k1':1,'k2':3})
        4. func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
        5. (1, 2, 3, 4, 5) {'k1': 2, 'k5': 9, 'k19': 999}
        6. (1, 2, 3) {'k1': 2, 'k5': 9, 'k19': 999}
        7. (1, 2, 3) {'k1': 1, 'k2': 3}
        8. (111, 222, 1, 2, 3) {'k11': 'alex', 'k1': 1, 'k2': 3}

    参数相关重点:

    1. 定义函数

      def func1(a1,a2):

      pass

      def func2(a1,a2=None):

      pass

      def func3(*args,**kwargs):

      pass

    2. 调用函数

      位置参数 > 关键字参数

  7. 作用域

python中:

  • py文件:全局作用域

  • 函数:局部作用域

    a = 1

    def s1():

    x1 = 666

    print(x1)

    print(a)

    print(b)

    1. b = 2
    2. print(a)
    3. s1()
    4. a = 88888
    5. def s2():
    6. print(a,b)
    7. s1()
    8. s2()
    9. ======
    10. 1
    11. 666
    12. 1
    13. 2
    14. 88888 2
    15. 666
    16. 88888
    17. 2
  • 总结:

    • 一个函数是一个作用域

      def func():

      x = 9

      print(x)

      func()

      print(x)#全局变量无x定义,报错。

    • 作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去 "父级" -> "父级" -> 直到全局,全部么有就报错。注意:父级作用域中的值到底是什么?

      x = 10

      def func():

      x = 9

      print(x)

      1. func()
    • 练习题:

      #!/usr/bin/env python

      # -- coding:utf-8 --

      1. # x = 10
      2. # def func():
      3. # x = 9
      4. # print(x)
      5. # def x1():
      6. # x = 999
      7. # print(x)
      8. #
      9. # func()
      10. # x = 10
      11. # def func():
      12. # x = 9
      13. # print(x)
      14. # def x1():
      15. # x = 999
      16. # print(x)
      17. # x1()
      18. #
      19. # func()
      20. # x = 10
      21. # def func():
      22. # x = 9
      23. # print(x)
      24. # def x1():
      25. # x = 999
      26. # print(x)
      27. # print(x)
      28. # x1()
      29. #
      30. # func()
      31. # x = 10
      32. # def func():
      33. # x = 8
      34. # print(x)
      35. # def x1():
      36. # x = 999
      37. # print(x)
      38. # x1()
      39. # print(x)
      40. #
      41. # func()
      42. # x = 10
      43. # def func():
      44. # x = 8
      45. # print(x)
      46. # def x1():
      47. # print(x)
      48. # x1()
      49. # print(x)
      50. #
      51. # func()
      52. # x = 10
      53. # def func():
      54. # x = 8
      55. # print(x)
      56. # def x1():
      57. # print(x)
      58. # x = 9
      59. # x1()
      60. # x = 10
      61. # print(x)
      62. #
      63. # func()
      64. #
      65. # x = 10
      66. # def func():
      67. # x = 8
      68. # print(x)
      69. # def x1():
      70. # print(x)
      71. #
      72. # x1()
      73. # x = 9
      74. # x1()
      75. # x = 10
      76. # print(x)
      77. #
      78. # func()
    • 子作用域中只能 找到父级中的值 ,默认无法重新为父级的变量进行赋值。(global/nonlocal可以强制做)

      # #####################

      name = 'oldboy'

      def func():

      name = 'alex' # 在自己作用域再创建一个这样的值。

      print(name)

      func()

      print(name)

      1. # #####################
      2. name = [1,2,43]
      3. def func():
      4. name.append(999)#列表为可变类型,可以修改。这里是修改,不是重新赋值。
      5. print(name)
      6. func()
      7. print(name)
      8. # ###################### 如果非要对全局的变量进行赋值
      9. # 示例一
      10. name = ["老男孩",'alex']
      11. def func():
      12. global name
      13. name = '我'
      14. func()
      15. print(name)
      16. # 示例一
      17. name = "老男孩"
      18. def func():
      19. name = 'alex'
      20. def inner():
      21. global name
      22. name = 999
      23. inner()
      24. print(name)
      25. func()
      26. print(name)
      27. name = "老男孩"
      28. def func():
      29. name = 'alex'
      30. def inner():
      31. global name
      32. name = 999
      33. inner()
      34. print(name)
      35. func()
      36. print(name)
      37. # ############################## nonlocal
      38. name = "老男孩"
      39. def func():
      40. name = 'alex'
      41. def inner():
      42. nonlocal name # 找到上一级的name
      43. name = 999
      44. inner()
      45. print(name)
      46. func()
      47. print(name)

总结

  • 参数

    • 调用(执行)函数时,传参:位置参数 > 关键字参数
    • 定义函数:
      • def func(a)
      • def func(a,b=None) # 对于默认值,如果是可变类型,----> 坑。
      • def func(*args,**kwargs)
  • 作用域
    • 函数为作用域
    • 自己 > 父级 > 父级 > 全局 【读/修改(可变)】
    • 重新赋值:
      • global
      • nonlocal

补充

  1. 全部变量以后必须全部是大写

    USER_LIST = [11,22,3]

    1. def func():
    2. name = 'asdf'
    3. USER_LIST.append(12)
    4. USER_LIST.append(name)
    5. func()
    6. print(USER_LIST)

python笔记10的更多相关文章

  1. python笔记-10(socket提升、paramiko、线程、进程、协程、同步IO、异步IO)

    一.socket提升 1.熟悉socket.socket()中的省略部分 socket.socket(AF.INET,socket.SOCK_STREAM) 2.send与recv发送大文件时对于黏包 ...

  2. selenium+python笔记10

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 我们多添加一些测试场景,比如:删除邮件,查找邮件,发送邮件等等 &qu ...

  3. Python笔记 #10# Histograms

    1.Build a histogram In [1]: help(plt.hist) Help on function hist in module matplotlib.pyplot: hist(x ...

  4. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  5. Python笔记之不可不练

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

  6. boost.python笔记

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

  7. Python笔记——类定义

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

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

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

  9. python笔记 - day8

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

随机推荐

  1. 【转】How to create a test plan

    What is a Test Plan? A TEST PLAN is a detailed document that describes the test strategy, objectives ...

  2. 穿越雷区--蓝桥杯--DFS/BFS

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  3. Windows对应的"Hello,world"程序

    <Windows程序设计>(第五版)(美Charles Petzold著) https://docs.microsoft.com/zh-cn/windows/desktop/apiinde ...

  4. bash脚本编程

    一.bash中的变量 变量类型: 本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效;   定义变量:[set]Var_name="value" 变量赋 ...

  5. springmvc 请求出现400错误(当传入的参数类型是Date时加上下面代码试试)

    @InitBinder protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) t ...

  6. Linux centosVMware Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间

    一.Nginx访问日志 vim /usr/local/nginx/conf/nginx.conf //搜索log_format  日至格式 改为davery格式 $remote_addr  客户端IP ...

  7. 58按之字形顺序打印二叉树 +队列访问使用front和back,栈才是top

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   思路:最暴力的方法就是使用队列进行层次遍 ...

  8. linux kill命令以及 信号

    kill命令介绍 命令作用 终止一个进程 语法: kill [-s signal|-p] [-q sigval] [-a] [--] pid... kill -l [signal] 选项 -l 信号, ...

  9. python神器-pycharm安装与使用(全网最新)

      pycharm分为社区版(免费)和专业版(收费/破解),以下安装仅适用于社区版 下载方式1: 官网下载:https://www.jetbrains.com/pycharm/download/dow ...

  10. 中山普及Day17——普及

    今天换教室,本来教室多好嘛,易守难攻,结果...今天今天仅下午就被熊抄了2次,熊超真TMD不是人呐,走路连脚步声都没有. 然后,播报分数: 爆0了!!!