• doraemon的python 函数(整理了下笔记)感觉自己棒棒哒


    第五章 函数

    5.1 三元运算

    v = 前面的值 if 条件 else 后面的值

    #等同于
    if 条件:
    v = 前面的值
    else
    v = 后面的值
       
    例如: v = val1 if 5>3 else val2    
       

    示例

    #让用户输入值,如果是整数,则转换成整数,否则值为None

    data = input('>>>')
    v = int(data) if data.isdecimal() else None

    5.2 函数

    用一个函数名,去代替整个函数的代码,在运行中值需要调用函数名就可以,方便简洁。

    注意:函数只有被调用后才会运行,仅仅放在代码中是不会运行的

    5.2.1函数式编程

    def get_data():
       v = [11,22,11,333,444]
       print(v)

    get_data()

     

    对于函数编程:

    • 本质:将一段代码拿到别处起个名字,以后可以通过名字来调用这段代码

    • 场景:

      • 代码重复执行

      • 代码量特别多,超过一屏幕,不方便看

    5.2.2 函数的基本结构

    #函数的基本结构
    def 函数名():
       #函数内容
       pass

    #函数的执行
    函数名()
    def get_list():
       v = [11,22,33,44]
       li = []
       for i in v:
           li.append(i)
       print(li)
       
    get_list()

    #注意:函数不被调用,内部代码永远不会执行

    5.3 参数

    def get_data(a1): #a1叫做形式参数
       v = [11,22,11,333,444]
       print(v[a1])

    get_data(0)  #0/1/2 叫实际参数
    get_data(1)
    get_data(2)

    示例

    #写出一个函数,计算列表中所有元素的和

    def get_list_sum(a1):
       data = 0
       for i in a1:
           data += i
       print(data)
       
    get_list_sum([11,22,44,66])

    5.3.1参数的基本知识

    • 任意个数

    • 任意类型

    def func(a1,a2,a3)
    print(a1,a2,a3)
       
    func(1,"asdf",True)

    5.3.2 位置传参

    def func(a1,a2):
       print(a1,a2)
       
    func(1,3)
    #上面的a1、a2与下面的1、3是根据位置来对应的

    5.3.3 关键字传参

    def func(a1,a2):
       print(a1,a2)
       
    func(a1=1,a2=3)

    #关键字传参和位置传参可以一起用,但有原则:
       #位置传参一定要在关键字传参的前面
       
    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) # 错误

    5.3.4 默认传参

    #1.在传形式参数的时候,就将其中的一个形式参数赋值
    #2.如果执行函数时,没有a3或者a4,则默认执行原来的值  


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

    func(11,22)
    func(11,22,10)
    func(11,22,10,100)
    func(11,22,10,a4=100)
    func(11,22,a3=10,a4=100)
    func(11,a2=22,a3=10,a4=100)
    func(a1=11,a2=22,a3=10,a4=100)

     

    5.3.5万能参数

    • *args

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

      #调用函数的时候没有有*
      def func(*args):
         print(args)
       
      func(1,2,3,4)

       

      #调用函数的时候有*
      def func(*args):
         print(args)

      func(*(1,2,3,4))
      func(*[1,2,3,4])

       

    • **kwargs

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

      #调用函数的时候没有*
      def func(**kwargs):
         print(kwargs)
      func(k1=1,k2=9)
      #电泳函数的室友有**
      def func(**kwargs):
         print(kwargs)

         func(**{k1:1,k2:9})
      # kwargs={'k1':1,'k2':9}

       

    5.3.6 综合运用 *args + **kwargs

    def func(*args,**kwargs):
       print(args,kwargs)

    # func(1,2,3,4,5,k1=2,k5=9,k19=999)

     

    5.4 返回值

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

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

    def func():
       内容
       return 9 #默认的返回值是None

    func('uhkn')
    #示例:

    #让用户输入一点字符串,计算字符串中有多少A字符。有多少个就在文件a.txt中学多少个"刘佳"

    def sum_A(data):
       sum = 0
       for i in data:
           if i == "A":
               sum += 1
       return sum

    def write_file(line):
       with open("a.txt",mode = "w",encoding = "utf-8") as file
       flie.write(line)

    content = input("请输入:")
    v = sum_A(content)
    line = "刘佳" * v
    def write_file(line):


           

    5.5 作用域

    • 作用域理解

    #示例
    a = 1
    def s1():
       x1 = 666
       print(x1)
       print(a)
       print(b)

    b = 2
    print(a)
    s1()
    a = 88888
    def s2():
       print(a,b)
       s1()

    s2()
    • 总结:

      • 一个函数就是一个局部作用域,局部作用域在全局作用域中

      • 作用域中数据查找的规则:优先在自己的作用域找,自己没有就不断往父级找,直到找到为止

      • 查找数据只能在函数调用命令之前找,函数不被调用是不会执行的,记住一定是在执行命令之前找

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



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


    # 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()

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

     

    • 子作用域只能找到父级中的值,默认无法为父级的变量进行赋值(global/nonlocal可以强制做)

    name = ["liujai",'liudanni']
    def func():
       global name
       name = '我'
    func()
    print(name)

     

  • 相关阅读:
    MapReduce Shuffle 和 Spark Shuffle 原理概述
    Kafka生产消费API JAVA实现
    Kylin引入Spark引擎
    CentOS 下安装 Cmake 步骤
    TP5 使用验证码功能
    连接树莓派中的MySQL服务器
    用 PHP 函数变量数组改变代码结构
    表的优化
    Wamp 下运行 CGI 笔记
    PHP 中的关于 trait 的简单
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11176210.html
Copyright © 2020-2023  润新知