zoukankan      html  css  js  c++  java
  • python中的函数

    摘要:本文主要介绍了python中函数涉及到的一些细小知识点。

    1、关于全局变量和局部变量

    在函数体中定义的一个变量为局部变量,但是可以通过global关键词将这个局部变量变成全局变量。

    2、关于函数的返回值

    • 一个函数不可以有两个return
    • 如果同时返回多个值,那么返回值会默认成元组
    • 返回值除了最基础的数据类型,当然也可以是字典、列表、元组等类型

    3、关于函数的参数

    (1)位置参数和关键字参数:

    • 位置参数:传入的值和函数定义的参数应该一一对应
    • 关键字参数:采用键=键值的形式进行传参,这个时候就不用注意参数的顺序了
    • 位置参数和关键字参数混合使用的时候,位置参数应该处于关键字参数前面

    (2)默认参数(缺省参数):

    默认参数是在函数定义时就已经直接采用键=键值的方式对该参数进行了赋值,那么在调用函数的时候如果不对该参数传参,那么该参数就直接使用默认值,如果进行传参,那么就放弃默认值而采用传入的参数。

    (3)不定长参数之包裹位置传递:

    采用args*作为参数的形式(包裹位置传递):

    1 def func(args *):
    2     print(args)

    这样就可以在传参的时候直接一次性传入最少0个,最多没有上限个参数,而且这样传入的参数以元组的形式存在。

    1 # 接收所有位置参数,返回一个元组
    2 def user_info(*args):
    3     print(args)
    4 
    5 
    6 user_info('TOM')
    7 user_info('TOM', 20)
    8 user_info('TOM', 20, 'man')
    9 user_info()

    执行结果如下:

    1 ('TOM',)
    2 ('TOM', 20)
    3 ('TOM', 20, 'man')
    4 ()

    (4)不定长参数之包裹关键字参数:

    • 属于不定长参数的范围,传入的参数以字典的形式存在
    • 传入的参数以关键字的形式来进行书写
    • 采用**kwargs的形式进行传参
    1 # 收集所有关键字参数,返回一个字典
    2 def user_info(**kwargs):
    3     print(kwargs)
    4 
    5 
    6 user_info()
    7 user_info(name='TOM')
    8 user_info(name='TOM', age=20)

    执行结果如下:

    1 {}
    2 {'name': 'TOM'}
    3 {'name': 'TOM', 'age': 20}

    4、关于拆包

    拆包,顾名思义,就是将元组、字典这样的数据的集合拆开并赋值给变量:

    元组拆包:

    1 tuple=('tom',17,'009')
    2 a,b,c=tuple
    3 print(a,b,c)

    结果如下:

    tom 17 009

    字典拆包:

    1 dict={'name':'tom','age':18,'class':'001'}
    2 a,b,c=dict   #从下面的结果可以看到,这里获取的是键
    3 
    4 print(a,b,c)    
    5 print(dict[a],dict[b],dict[c])

    结果如下:

    1 name age class
    2 tom 18 001

    5、关于数据的交换

    在python中,交换数据当然可以像c语言中一样采用第三个变量的方式进行,也可以采用以下这样更为简单的形式进行:

    1 a,b=1,2
    2 print(a,b)   # 1 2
    3 
    4 a,b=b,a
    5 print(a,b)   #2 1

    6、关于python中的引用

    • 在python中,同一个不可变类型的变量(整型、浮点型、字符型、元组等)先后赋予不同的值,那么这个变量所代表的的内存地址就会发生改变,如下:
    1 a=1
    2 print(id(a))    #1572301856
    3 a=2
    4 print(id(a))    #1572301888

    也正因为如此,下面的这种情况才可以很好的理解:

    1 a=1
    2 b=a
    3 print(id(a))  #1572301856
    4 print(id(b))  #1572301856
    5 
    6 a=2
    7 print(id(a))  #1572301888
    8 print(id(b))  #1572301856
    •  如果对于可变类型的变量(列表,字典,集合等),改变变量存储的内容,内存地址并不会发生改变:
     1 aa = [10, 20]
     2 bb = aa
     3 
     4 print(bb)
     5 
     6 print(id(aa))
     7 print(id(bb))
     8 
     9 aa.append(30)
    10 print(aa)
    11 print(bb)  # 列表是可变类型
    12 
    13 print(id(aa))
    14 print(id(bb))

    执行结果如下:

    1 [10, 20]
    2 2684605628744
    3 2684605628744
    4 [10, 20, 30]
    5 [10, 20, 30]
    6 2684605628744
    7 2684605628744
    •  再比如下面的例子可以更好的理解这样的原理:
     1 def test1(a):
     2     print(a)
     3     print(id(a))
     4 
     5     a += a
     6     print(a)
     7     print(id(a))
     8 
     9 b = 100
    10 test1(b)
    11 '''
    12 100
    13 1571518592
    14 200
    15 1571521792
    16 '''
    17 
    18 c = [11, 22]
    19 test1(c)
    20 '''
    21 [11, 22]
    22 1734212653832
    23 [11, 22, 11, 22]
    24 1734212653832
    25 ''' 
  • 相关阅读:
    所谓的小项目
    PHP开发者常犯的10个MySQL错误
    这是掌握cookie最后的一个障碍
    Lua学习笔记(2)——table
    Corona Enterprise 引入第三方 jar 包
    Lua学习笔记(1)
    SQL分页查询笔记
    三两句记录设计模式(1)——简单工厂模式
    Window + Net + Corona + IOS PUSH
    IoC学习
  • 原文地址:https://www.cnblogs.com/lzy820260594/p/11802135.html
Copyright © 2011-2022 走看看