软件测试|什么是Python函数及名称空间?

简介: 软件测试|什么是Python函数及名称空间?

在这里插入图片描述

Python函数及名称空间

函数

  1. 什么是函数?
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
作用:
函数能提高应用的模块性,和代码的重复利用率
  1. 函数的语法结构
def 函数名(参数):
    '''函数注释'''
    函数体代码
    return 返回值
1.def
    定义函数的关键字
2.函数名
    等同于变量名
3.参数
    可以不填,主要是在使用函数的时候规定外界要不要传数据进来
4.函数注释
    类似于说明书,用来介绍这段函数体的使用说明
5.函数体代码
    是整段函数的核心,主要取决于程序员的编写
6.return
    使用函数之后可以返回数据给使用者,可以不填
  1. 函数的定义与调用
1.函数在定义阶段只检测语法,不执行代码
    def func():
        pass
2.函数在调用阶段才会执行函数体代码
    func()
3.函数必须先定义,后调用
4.函数的调用使用:函数名()
    如有参数需要在括号内按相应的规则填写
  1. 函数的分类
1.空函数
    函数体代码为空,主要用于先创建一个框架,函数体用pass补全
      def register():
        """注册功能"""
        pass
2.无参函数
    函数名后方括号内无需填写参数
     def index():
        print('from index function')
3.有参函数
    函数名后方括号内需要填写参数才可以调用
    def func(a):
        print(a)
  1. 函数的返回值
1.什么是返回值
    调用函数之后返回给调用者的结果
2.如何获取返回值
    # 变量名 赋值符号 函数的调用
    res = func()  # 先调用函数,然后用变量名接收结果
3.返回值的多种结果
    1.函数体代码中没有return时,默认返回None
    2.函数体代码中有return时,后面没写数据,返回None
    3.函数体代码中有ruturn时,返回后面写的值
    4.函数体代码中有return时,后面写多个数据,以元组的形式返回
        我们以list形式写的值就会以列表返回,否则默认以元组形式返回
    5.函数体代码遇到retrun会自动结束函数体代码
  1. 函数的参数
1.形式参数
    在函数定义阶段函数名后方括号内填写的参数,简称‘形参’
2.实际参数
    函数调用时,函数名后方括号内填写的参数,简称‘实参’

 -----------------------------------------------------------------------------
'''
    形参与实参的关系:
        形参类似于变量名,在函数定于阶段可以随便写,最好做到见名知意
            def register(name,pwd):
                pass
    
    实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开
    register('kangkang',123)   形参name与kangkang绑定 形参pwd与123绑定

'''
-----------------------------------------------------------------------------
          

函数参数

引言:
函数的参数主要是在使用函数的时候规定外界要不要传数据进来
参数分为两种:
1、形参
2、实参
而形参和实参又共分为以下几个种类
  1. 位置参数
1.位置形参:
    在函数定义阶段括号内从左往右依次填写的变量名
        def func(a, b, c):pass
    
2.位置实参:
    在函数调用阶段括号内从左往右依次填写的数据值
        func(1, 2, 3)
'''
定义:
    1、在调用时,形参和实参位置必须一致
    2、在调用时,形参和实参数量必须一致
    3、在调用时可用关键字传参
        3.1.关键字传参需要跟在位置传参的后面
    4、同一个形参在调用时不能多次赋值
    5、实参可以传递绑定数据值的变量名
'''

在下面这个函数中,a是必选参数,是必须要指定的

>>> def demo_func(a):
...     print(a)
... 
>>> demo_func(10) 
10
>>> demo_func()  # 不指定会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required positional argument: 'a'

在下面这个函数中, name和age 都是必选参数,在调用指定参数时,如果不使用关键字参数方式传参,需要注意顺序

>>> def print_profile(name, age):
...     return f"我的名字叫{name},今年{age}岁了"
...
>>> print_profile("kangkang", 18)
'我的名字叫kangkang,今年18岁了'

如果参数太多,你不想太花精力去注意顺序,可以使用关键字参数方式传参,在指定参数时附上参数名,比如这样:

>>> print_profile(age=18, name="kangkang")
'我的名字叫kangkang,今年18岁了'
  1. 默认参数
1.默认形参
    在函数定义阶段,可填写默认值
    def func(name, age = '18')
2.默认实参
    在调用阶段,默认值不需要修改时可以不用传参,结果为默认值
    def func('kangkang')
    
 '''
 定义:    
     默认参数必须放在位置参数的后面,否则程序会报错
 '''  

在下面这个函数中,b是可选参数(默认参数),可以指定也可以不指定,不指定的话,默认为10

>>> def demo_func(b=10):
...     print(b)
... 
>>> demo_func(20)
20
>>> demo_func()
10

在定义时,必选参数一定要在可选参数的前面,不然运行时会报错

>>> def demo_func(a=1, b):
...     print(a, b)
... 
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>>
>>> def demo_func(a, b=1):
...     print(a, b)
... 
>>>

3、可变长参数

  1. 一个*号
1.可变长形参 *  (一个*号)
    在函数定义阶段,括号内的参数可接收多余位置实参,*后的参数名约定俗成为args
    def num (x,y,*args):
        print(args)
        return 1
    num(1,2,3,4,5)
----------------------------------------------------------
(3, 4, 5)  *args就为(3,4,5),1,2分别传给了x,y


2.可变长实参 *     (一个*号)
    在函数调用阶段,*可接收各类数据库并循环进行传参
    def func(x, y, z, *args):
        print(x, y, z, args)
        func(1, *(1, 2), 3, 4)
----------------------------------------------------------
1 1 2 (3, 4)

'''
须知:
    1.字符串 #  按字符顺序依次传参
    2.列表 #  按列表数据值顺序依次传参
    3.集合 #  集合无序,数据值传参顺序随机
    4.元组 #  按元组数据值顺序依次传参
    5.字典 #  只能传参字典K值
'''    

在下面这个函数中,args 参数和上面的参数名不太一样,在它前面有一个 *,这就表明了它是一个可变参数,可以接收任意个数的不指定参数名的参数。

>>> def demo_func(*args):
...     print(args)
... 
>>> 
>>> demo_func(10, 20, 30)
(10, 20, 30)

可变位置参数可以放在必选参数前面,但是在调用时,必选参数必须要指定参数名来传入,否则会报错

>>> def demo_func(*args, b):
...     print(args)
...     print(b)
... 
>>> demo_func(1, 2, 100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required keyword-only argument: 'b'
>>> 
>>> demo_func(1, 2, b=100)
(1, 2)
100
  1. 两个*号
1.可变长形参 **  (两个*号)
    会将溢出的关键字实参,储存成字典的形式,然后赋值给**号后的形参,**号后参数约定俗成,称为kwargs
    def func(**kwargw):
        print(kwargw)

     func(a=5)
----------------------------------------------------------
{'a': 5}


2.可变长实参 **  (两个*号)
     将字典打散成关键字参数的形式传递给形参
    def func(name, age, hobby):
        print(name, age, hobby)


    dict_user_name = {'name': 'kangkang', 'age': 18, 'hobby': 'ball'}
        func(**dict_user_name)
----------------------------------------------------------
kangkang 18 ball   

在下面这个函数中,kw 参数和上面的 args 还多了一个 ,总共两个 ** ,这个意思是kw 是一个可变关键字参数,可以接收任意个数的带参数名的参数。

>>> def demo_func(**kw):
...     print(kw)
... 
>>> demo_func(a=10, b=20, c=30)
{'a': 10, 'b': 20, 'c': 30}

可变关键字参数则不一样,可变关键字参数一定得放在最后,下面三个示例中,不管关键字参数后面接位置参数,还是默认参数,还是可变参数,都会报错。

>>> def demo_func(**kw, a):
  File "<stdin>", line 1
    def demo_func(**kw, a):
                        ^
SyntaxError: invalid syntax
>>> 
>>> def demo_func(**kw, a=1):
  File "<stdin>", line 1
    def demo_func(**kw, a=1):
                        ^
SyntaxError: invalid syntax
>>> 
>>> def demo_func(**kw, *args):
  File "<stdin>", line 1
    def demo_func(**kw, *args):
                        ^
SyntaxError: invalid syntax

3、args和*kwargs一起使用


def num(x, y, f=0, *args, **kwargs):
    print(f)
    print(args)
    print(kwargs)
    return 1


num(1, 2, 6, 7, 8, j=3, n=4, q=5)
---------------------------------------------------------------------------
6
(7, 8)
{'j': 3, 'n': 4, 'q': 5}

在定义时,可变位置参数一定要在可变关键字参数前面,不然运行时也会报错

>>> def demo_func(**kw, *args):
  File "<stdin>", line 1
    def demo_func(**kw, *args):
                        ^
SyntaxError: invalid syntax
>>> 
>>> def demo_func(*args, **kw):
...     print(args, kw)

名称空间

引言:
名称空间就是python用来储存名称的空间(可以简单理解为储存变量名的空间)
名称空间可分为以下三种,并且各自拥有不同的作用

1、名称空间的类型、作用及存活时间

  • 内置名称空间

    • 作用:用来储存python解释器内置方法名的空间
    • 作用域:python解释器
    • 存活周期:解释器开启则产生,关闭则销毁
  • 全局名称空间

    • 作用:用来储存py文件内变量名的空间
    • 作用域:单个py文件
    • 存活周期:单个py文件打开时产生,关闭则销毁
  • 局部名称空间

    • 作用:用来储存函数体代码内变量名的内存空间
    • 作用域:函数体代码、类别体代码
    • 存活周期:函数体、类别体代码运行时产生,运行完毕销毁

2、名字的查找顺序

首先,在查找前,我们需要分请名字所在的域

​python运行代码时由外部代码向内运行,而名字则是由内向外查找:

  • 局部内存空间

​ 局部内存空间>>>全局内存空间>>>内置内存空间

  • 全局空间


全局内存空间>>>内置内存空间

​ 且要符合以下几点要求:

​ 1、在局部内存空间嵌套,由子代码向父代码中查找

​ 2、相互独立的代码体默认无权互相访问

在这里插入图片描述

相关文章
|
2月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
193 0
|
2月前
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
46 7
|
2月前
|
机器学习/深度学习 数据处理 索引
Python内置函数:面试通关的49个秘密武器
本文精选49个Python高频面试内置函数,涵盖数值处理、类型转换、序列操作、字典集合、函数式编程及高级特性,结合真实代码案例解析底层逻辑与应用场景,助你提升开发效率,轻松应对技术面试。
54 1
|
1月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
4月前
|
测试技术 数据库 Python
解释测试中setup和teardown函数的应用。
总结起来,`setup`和 `teardown`函数就像扔宴会的主人,他们保障了宴会的流畅进行。他们是准备环境和清理现场的重要工作人员,他们的工作直接影响着我们的测试效率和质量。我们可以把 `setup`和 `teardown`想象成隐藏在幕后,默默为我们服务的工作者,他们做着我们需要但是往往忽视的工作。所以,下次当你写测试的时候,别忘了给你的 `setup`和 `teardown`留出足够的位置,因为他们的作用可能是你成功的保证。
101 14
|
5月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
108 20
|
3月前
|
API Python
Python 的内建函数
Python 的内置函数列表,方便查询使用方法。
|
3月前
|
数据采集 自然语言处理 搜索推荐
Python内置函数ord()详解
`ord()` 是 Python 中用于将单个字符转换为对应 Unicode 码点的核心函数,支持 ASCII、多语言字符及特殊符号。其返回值为整数(范围 0-1114111),适用于字符编码验证、数据清洗、自定义排序、基础加解密等场景。使用时需注意参数长度必须为 1,否则会触发 `TypeError`。结合 `chr()` 函数可实现双向转换,进阶技巧包括多字节字符处理、编码范围检测及字符分类验证等。
|
5月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
109 17
|
5月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
111 11

推荐镜像

更多