XZ_Python之Python3基础_函数

函数的基本概念

语法:
def func_name(参数):
    pass  # 空函数就使用pass,代表什么都没有

    def 是define的简写。函数如果没有返回值,默认(return None)

函数的参数:

    1)参数是写在括号中的,如果是可选参数,参数后面跟一个默认值,如下:

 def func_name(m=3):
    2)如果是必选参数,参数后面没有默认值。如下:
def func_name(m):
函数的健壮性:

   1)永远知道你的方法会返回什么(异常处理,条件判断)
   2)返回你想要的结果

判断函数的参数类型

例如:使用isinstance判断参数是否都是数字

def add(num1,num2):
    if isinstance(num1,int) and isinstance(num2,int):
        return num1 + num2
    else:
        return "参数里有不是数字的类型"
断言测试

最常用的测试方法,断言就是异常。例如:

assert add(2,3) == 5
assert add(1,2) == 4

不建议把断言放在程序控制流程中,但是,将断言放在流程中,有问题就会崩溃,可以更快的找到错误。断言的内部实现:

if __debug__:
    if not (断言的条件):
        raise 断言异常

简单的函数

定义一个方法 get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。
其他类型则报错,并且返回一个偶数列表。(注:列表里面的元素为偶数)。

def get_num(nums):
    if not isinstance(nums,list):
        return "输入的参数不是列表类型"
    else:
        numList = []
        for n in nums:
            if not isinstance(n,int):
                return "列表里面的元素不是数字类型"
            else:
                if n % 2 == 0:
                    numList.append(n)
        return numList

if __name__ == '__main__':
    ls = [1,2,3,4,5]
    print("输出结果:",get_num(ls))

    assert get_num([3,4,25,6]) == [3,4,25,6]
    assert get_num([1,3,'aa','qwer']) == "列表里面的元素是数字类型"
    assert get_num((1,2,3,4,5,10)) == "输入的参数不是列表类型"
函数的作用域

    1>在函数中修改全局变量其值

global arg

arg = 1

def fun1():
    global arg # 里面也要定义一遍
    arg = 3

fun1()

print(arg)

    2>在函数中引入可变参数,因为可变参数本身是可以被修改的,所以,在函数中引入可变参数是十分危险的

def fun1(arg):
    if not isinstance(arg,list):
        return "输入的不是列表类型"
    # 修改列表的第一个参数值
    arg[0] = 5
    return arg

tlist = [1,2,3,4,6]
print(tlist,"\n",fun1(tlist))
"""
输出结果:列表本身被修改
[5, 2, 3, 4, 6] 
[5, 2, 3, 4, 6]
"""
函数的魔术方法

定义函数的时候,有些时候我们想拿到他的内部的一些信息和属性,这时我们可以利用函数内部自己的一些魔术方法,这样可以很快的拿到一些它的数据,例如:

def fun1(arg1,arg2):
    return arg1 + arg2

print(dir(fun1.__code__)) # 查看code方法的属性
"""
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_kwonlyargcount', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
"""
print(fun1.__code__.co_varnames) # 查看方法的参数的名称
"""
('arg1', 'arg2')
"""
print(fun1.__code__.co_filename) # 查看当前代码文件的路径
"""
/Users/admin/PycharmProjects/untitled1/venv/LearnText/Test1.py
"""
print(help(fun1.__code__))


 
 






猜你喜欢

转载自blog.csdn.net/understand_xz/article/details/79816166