• Python学习(3)-基础语法(字典,函数)


    1. 字典

    1.1 定义

    字典是另一种可变容器模型,且可存储任意类型对象。

    字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:

    d = {key1 : value1, key2 : value2, key3 : value3 }
    
    • 1
    • 键必须是唯一的,但值则不必。
    • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

    举例:

    tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
    tinydict1 = { 'abc': 456 }
    tinydict2 = { 'abc': 123, 98.6: 37 }
    
    • 1
    • 2
    • 3

    1.2 创建空字典

    使用大括号 { } 创建空字典:

    # 使用大括号 {} 来创建空字典
    emptyDict = {}
     
    # 打印字典
    print(emptyDict)
     
    # 查看字典的数量
    print("Length:", len(emptyDict))
     
    # 查看类型
    print(type(emptyDict))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用内建函数 dict() 创建字典:

    emptyDict = dict()
     
    # 打印字典
    print(emptyDict)
     
    # 查看字典的数量
    print("Length:",len(emptyDict))
     
    # 查看类型
    print(type(emptyDict))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.3 访问字典里的值

    把相应的键放入到方括号中,如下实例:

    #!/usr/bin/python3
     
    tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
     
    print ("tinydict['Name']: ", tinydict['Name'])
    print ("tinydict['Age']: ", tinydict['Age'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.4 修改字典

    向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

    #!/usr/bin/python3
     
    tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
     
    tinydict['Age'] = 8               # 更新 Age
    tinydict['School'] = "菜鸟教程"  # 添加信息
     
     
    print ("tinydict['Age']: ", tinydict['Age'])
    print ("tinydict['School']: ", tinydict['School'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.5 删除字典元素

    能删单一的元素也能清空字典,清空只需一项操作。
    显式删除一个字典用del命令,如下实例:

    #!/usr/bin/python3
     
    tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
     
    del tinydict['Name'] # 删除键 'Name'
    tinydict.clear()     # 清空字典
    del tinydict         # 删除字典
     
    print ("tinydict['Age']: ", tinydict['Age'])
    print ("tinydict['School']: ", tinydict['School'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.6 字典键的特性

    字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
    两个重要的点需要记住:
    1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

    #!/usr/bin/python3
    tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}
    print ("tinydict['Name']: ", tinydict['Name'])
    
    • 1
    • 2
    • 3

    2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

    2 函数

    2.1 函数的定义

    你可以定义一个由自己想要功能的函数,以下是简单的规则:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号 : 起始,并且缩进
    • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None
    def 函数名(参数列表):
        函数体
    
    • 1
    • 2

    案例:

    #!/usr/bin/python3
     
    def max(a, b):
        if a > b:
            return a
        else:
            return b
     
    a = 4
    b = 5
    print(max(a, b))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 函数调用

    #!/usr/bin/python3
     
    # 定义函数
    def printme( str ):
       # 打印任何传入的字符串
       print (str)
       return
     
    # 调用函数
    printme("我要调用用户自定义函数!")
    printme("再次调用同一函数")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.3 参数传递

    在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的:

    a=[1,2,3]
    
    a="Runoob"
    
    • 1
    • 2
    • 3

    以上代码中,[1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

    2.3.1 可更改(mutable)与不可更改(immutable)对象

    在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象

    • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。

    • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

    python 函数的参数传递:

    • 不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。

    • 可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响。

    传不可变对象实例:

    def change(a):
        print(id(a))   # 指向的是同一个对象
        a=10
        print(id(a))   # 一个新对象
     
    a=1
    print(id(a))
    change(a)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    返回值:
    在这里插入图片描述

    传可变对象实例

    #!/usr/bin/python3
     
    # 可写函数说明
    def changeme( mylist ):
       "修改传入的列表"
       mylist.append([1,2,3,4])
       print ("函数内取值: ", mylist)
       return
     
    # 调用changeme函数
    mylist = [10,20,30]
    changeme( mylist )
    print ("函数外取值: ", mylist)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    返回值:
    在这里插入图片描述

    2.4 参数

    以下是调用函数时可使用的正式参数类型:

    • 必需参数
    • 关键字参数
    • 默认参数
    • 不定长参数

    2.4.1 必需参数

    #!/usr/bin/python3
     
    #可写函数说明
    def printme( str ):
       "打印任何传入的字符串"
       print (str)
       return
     
    # 调用 printme 函数,不加参数会报错
    printme()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.4.2 关键字参数

    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    #!/usr/bin/python3
     
    #可写函数说明
    def printme( str ):
       "打印任何传入的字符串"
       print (str)
       return
     
    #调用printme函数
    printme( str = "哈哈哈")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    或者

    #!/usr/bin/python3
     
    #可写函数说明
    def printinfo( name, age ):
       "打印任何传入的字符串"
       print ("名字: ", name)
       print ("年龄: ", age)
       return
     
    #调用printinfo函数
    printinfo( age=50, name="runoob" )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.4.3 默认参数

    调用函数时,如果没有传递参数,则会使用默认参数。

    #!/usr/bin/python3
     
    #可写函数说明
    def printinfo( name, age = 35 ):
       "打印任何传入的字符串"
       print ("名字: ", name)
       print ("年龄: ", age)
       return
     
    #调用printinfo函数
    printinfo( age=50, name="runoob" )
    print ("------------------------")
    printinfo( name="runoob" )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.4.4 不定长参数

    你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数。

    def functionname([formal_args,] *var_args_tuple ):
       "函数_文档字符串"
       function_suite
       return [expression]
    
    • 1
    • 2
    • 3
    • 4

    加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
    不传,元组也可以为空。

    #!/usr/bin/python3
      
    # 可写函数说明
    def printinfo( arg1, *vartuple ):
       "打印任何传入的参数"
       print ("输出: ")
       print (arg1)
       print (vartuple)
     
    # 调用printinfo 函数
    printinfo( 70, 60, 50 )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    还有一种就是参数带两个星号 **基本语法如下:

    def functionname([formal_args,] **var_args_dict ):
       "函数_文档字符串"
       function_suite
       return [expression]
    
    • 1
    • 2
    • 3
    • 4

    加了两个星号 ** 的参数会以字典的形式导入

    #!/usr/bin/python3
    
    # 可写函数说明
    def printinfo(arg1, **vardict):
        "打印任何传入的参数"
        print("输出: ")
        print(arg1)
        print(vardict)
    
    
    # 调用printinfo 函数
    printinfo(1, a=2,b=3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    返回值:
    在这里插入图片描述
    声明函数时,参数中星号 * 可以单独出现,例如:

    def f(a,b,*,c):
        return a+b+c
    
    • 1
    • 2

    如果单独出现星号 *,则星号 * 后的参数必须用关键字传入:

     f(1,2,c=3) # 正常
    
    • 1

    2.5 匿名函数

    Python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

    • lambda 只是一个表达式,函数体比 def 简单很多。
    • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
    • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
    • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    我们可以将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数。

    def myfunc(n):
        return lambda a: a * n
    
    # 2是myfunc的变量参数 11为lamda函数的变量
    mydoubler = myfunc(2)
    mytripler = myfunc(3)
    
    print(mydoubler(11))
    print(mytripler(11))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    返回值:
    在这里插入图片描述

    2.6 return 语句

    #!/usr/bin/python3
     
    # 可写函数说明
    def sum( arg1, arg2 ):
       # 返回2个参数的和."
       total = arg1 + arg2
       print ("函数内 : ", total)
       return total
     
    # 调用sum函数
    total = sum( 10, 20 )
    print ("函数外 : ", total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    LLM RAG系列
    如何排查CPU飙升的问题所在
    EDA实验-----4*4矩阵键盘与数码管显示测试(Quartus ‖)
    Uniapp有奖猜歌游戏系统源码,附带流量主
    从零学习 InfiniBand-network架构(六)—IB协议链路层QoS如何实现
    K8S 运维管理
    2020年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
    wangeditor富文本编辑器的使用(vue)
    ConcurrentHashMap原理详解(太细了)
    掌握交易时机!
  • 原文地址:https://blog.csdn.net/wu2374633583/article/details/125320975