ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习之路:十一.函数

2022-01-06 20:33:30  阅读:151  来源: 互联网

标签:十一 函数 形参 index python func print 实参 def


一.函数参数的两大分类:

1. 形式参数
    在函数定义阶段从左往右依次写入的变量名就叫形式参数,简称"形参"
        def func(a,b):
            pass
        
        # 这里的a和b就是形式参数,形参
2. 实际参数
    在函数调用阶段从左往右依次写入的变量值就叫实际参数,简称"实参"
        func(1, 2)
        # 这里的1和2就是实际参数
 
'''
    形参和实参是什么样的关系
        形参相当于变量名,实参相当于变量值
        他们两个在函数调用阶段临时绑定,函数运行结束立马断开联系
'''

# 形参的表现形式就一种
# 实参的表现形式有多种

二.位置参数:

位置参数
    # 从左往右依次写入的数据就是位置参数
位置形参
    # 在定义函数的时候,从左往右依次写入的变量名就是位置形参
位置实参
    # 在函数调用阶段,从左往右依次写入的变量值就是位置实参
    
 # 写一个可以比较两个数字大小的函数,哪个大返回哪个值
        
def my_max(a, b):
    print(a, b)
    if a > b:
        return a
    else:
        return b

res = my_max(1, 2)
print(res)
    
# 关键字实参
    my_max(b=1, a=2)  # 关键字参数
    通过形参名=变量值的形式传递
 
'''
    位置形参和位置实参的关系:
        位置实参从左往右依次传递给位置实参(一一对应)
'''

三.默认参数

默认形参:
    在函数定义阶段,两种情况:
        1. 如果你没有给形参传递值,就使用默认的
        2. 如果你给形参传递了值,就使用你给的

# 用户注册功能:
def register(name, age, gender='male'):
    print('%s:%s:%s' % (name, age, gender))

# 练习题2:
x = 100


def index(a, b, c=x):
    print(a, b, c)


x = 200
index(1, 2)

'''
    第一种解释:
        函数在定义阶段,已经把值固定死了
    第二种解释:
        变量名与变量值在内存中的关系判断
        
'''

四.可变长参数:

1. 无论我在函数调用阶段传递多少个位置实参都可以
def index(x, y, *a):
    print(x, y)
    print(a)


# index(1, 2, 3, 4)
# index(1, 2, 3, 4, 5, 6, 7, 8)
# index()
# index(1, 2, 3)
# index(1, 2, 3, 4, 5, 6)

# index()
index(1, 2)
index(1, 2, 3, 4, 5, 6)
'''
*在形参中的使用:
    接收多余的位置实参,把多余的实参赋给*号后面的变量名,(元组形式)
'''

2. 无论我在函数调用阶段传递多少个关键字实参都可以
# 2. 无论我在函数调用阶段传递多少个关键字实参都可以
def index(a, b, **x):
    print(x)


# index() # {}
index(a=1, b=2, c=3)  # {'a': 1, 'b': 2, 'c': 3}

'''
**号在形参中的使用:
    接收多余的关键字参数,把多余的关键字参数赋给了**号后面的变量名,以字典的格式
'''

3. 无论我在函数调用阶段传递多少个位置参数和关键字参数都可以

def index(u, z=100, *a,  **b, ):
    print(a)
    print(b)
    print(u)


# index()
index(1, 2, x=1, y=2)
'''
    默认参数只要不放在**后面都可以
    *号后面和**号后面的变量名可以任意命名
        但是,在python中推荐使用
            *args   => arguments
            **kwargs  => keyword arguments
        def func(a, b, c, *args, **kwargs):
            pass
'''

# *号和**号在实参中的使用:
def index(a, b, c):
    # print(args)
    print(a, b, c)


# l = [11, 22, 33]
t = (11, 22, 33)


# index(l)
# index(l[0], l[1], l[2]) # index(11, 22, 33)

# index(*l)  # index(11, 22, 33)

'''**号在实参中的使用'''
def func(username, password):
    print(username, password)


d = {'username': 'jason', 'password': 222}
# func(d['x'], d['y'])
func(**d)  # func(username='jason',password=222)
func(username='jason', password=222)

五.名称空间的概念:

1. 什么是名称空间?
    就是绑定变量名和变量值的地方
    
2. 名称空间的分类:
    -1 内置名称空间
        在python解释器中
         len()
         print()
         open()
            
    -2 全局名称空间
        # 在py文件中,定格写的都是全局名称空间
        name = 'ly'
        def func():  # func函数名就在全局名称空间中
            pass
        a = [11, 22, 33]
        # for i in a:  # i 也在全局名称空间中
        #     print(i)
        # 
        # print(i)

        while True:
            x = 123  # 也在
            break
            
        # 查看全局的名称空间
        print(globals())
    -3 局部名称空间
        # 在函数体中存在的都是局部的
        def index(a, b, c):
            x = 222
            y = 111
            # 查看局部的名称空间
            print(locals())
       index(1, 2, 3)

六.名字的查找顺序:

查找顺序:
    1. 看自己位置在哪里:
        如果在局部:局部    >>>    全局    >>>  内置
        如果在全局: 全局   >>>  内置
        
 # 局部名称空间的嵌套:
    
def f1():
    # x = 222

    def f2():
        # x = 333

        def f3():
            # x = 444

            def f4():
                # x = 555

                def f5():
                    # x = 666
                    print(x)
                f5()
            f4()
        f3()
    f2()
f1()

 

标签:十一,函数,形参,index,python,func,print,实参,def
来源: https://www.cnblogs.com/machenhao/p/15772708.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有