[从零开始学Python]3.函数

3.函数

​ 函数的本质就是功能的封装,和对代码的抽象

1.函数的作用

1.避免开发重复性的代码

2.便于程序的理解与维护

3.对底层代码的抽象

2.函数的格式

def 函数名(参数):

​ 函数功能代码…

​ 函数功能代码…

​ return (若没有返回值NULL)

Python函数并不需要声明类型,调用的方法:函数名(参数,参数…)

声明函数时的参数->形参,使用函数时的参数->实参

返回值

3.内置函数

我们例举了一些内置函数,更多的内置函数我们可以在官方文档中查看,也可以自己找一些教程

# 内置函数
print(abs(-20))
# 查看帮助文档
help(abs)
list1  = [2,4,-6,-7,9,-10]
print(max(list1))
print(max(2,4,-6,-7,9,-10))
# 数据类型转换
print(type(int('123')))
print(type(str(123)))
print(type(float("123")))

4.自定义函数

自定义函数的导入实例:

例如:

# 从其他位置导入函数
from MyTest import my_abs
print(my_abs(-999))
# help查看函数说明文档
help(my_abs)

MyTest.py

# 自定义 abs函数
def my_abs(x):
    '''
    自定义abs函数
    :param : 一个自然数
    :return: 这个自然数的绝对值
    '''
    if x>=0:
        return x
    else:
        return -x

自定义的函数不但可以外置,还可以自己去书写函数的说明,上述调用的输出情况如下:

999
Help on function my_abs in module MyTest:

my_abs(x)
    自定义abs函数
    :param : 一个自然数
    :return: 这个自然数的绝对值

我们还可以通过这种方式找到这个函数的说明文档

my_abs.__doc__

为了方便让别人得到更友好的使用体验,我们可以把报错设置的更加人性化

# 自定义 abs函数
def my_abs(x):
    '''
    自定义abs函数
    :param : 一个自然数
    :return: 这个自然数的绝对值
    '''
    if not isinstance(x,int,float):
        raise TypeError('只能输入int或float类型参数')
    if x>=0:
        return x
    else:
        return -x

这个isinstance()函数,是判断函数类型的函数,如果x是int或者float则返回真。注意not

5.多个返回值的函数

在python当中,多个返回值的函数也是很常见的

def getNames():
    return 'lsw','qq1'

那么我们如何去接受这种多返回值的函数呢,1.可以用多个变量去接收,2.可以用一个变量去接收

name1,name2 = getNames()
print(name1,name2)

t = getNames()
print(t)
print(type(t))

可以发现,如果用多个变量去接收,那就可以直接得到值,如果用一个变量接收多个返回值的函数,那么得到的就是一个元组

>>>lsw qq1
>>>('lsw', 'qq1')
>>><class 'tuple'>

6.默认参数

假设我们有一个已经使用了很久的函数power()
我们期待给他一个拓展的功能,可以实现计算x的n次方
如何拓展使得在不影响旧函数使用的情况下新添这个功能呢

def power(x):
    return x*x

def power(x,n=2):
    s = x
    while n>1:
        s = s*x
        n = n-1
    return s

print(power(2,3))
print(power(4))

7.多个参数的函数

def getSum(numbers):
    sum = 0
    for i in numbers:
        sum+=i
    return sum

print(getSum([1,2,3,4,5]))

这种情况下我们给出的参数得是列表形式的,如何使参数的给出可以更加随意呢

def getSum(*numbers):
    sum = 0
    for i in numbers:
        sum+=i
    return sum

print(getSum(2,4,6,8))
nums = [2,3,4]
# 通过列表传入
print(getSum(*nums))

8.函数的关键字

有已知的参数,还有提供可以拓展的参数

def student(name,sex,**kw):
    print('name:',name,'sex:',sex,'others:',kw)

student('lsw','male',age=24,region='china')
# 通过字典传入
dicts = {'age':24,'region':'china'}
student('lsw','male',**dicts)
# 在之后的可选关键字中,只接收指定关键字
def student(name,sex,*,city):
    pass

综上,对于关键字接收,已经有了这么几种方法

def f1(a,b,c=0,*args,**kw):
    '''
    a,b为必选参数,c为默认值参数,args为任意个参数,而kw为键值对型的参数
    '''
    pass
def f2(a,b,c=0,*,d,**kw):
    '''
    像这种*,d即多个非键值对型参数中,除了给出的必选参数和默认值参数,只接收d属性这个参数,但kw对应的是键值对型参数,对于给出的键值对型参数还是可以接收
    '''
    pass

9.全局变量

在python中,也是区分全局变量和局部变量的,在函数中可以使用或者修改全局变量,但前提是需要声明一下这个变量是全局的,(global),以使解释器知道,这是一个全局变量而非local variable局部变量

而局部变量,只能在声明它的代码块中访问或者修改,例如下面的age 就是定义在函数fun()中的局部变量,若在函数外访问,会提是这个变量是未定义的。

# 全局变量与局部变量
name = 'zhangsan' # 全局变量
def fun():
    # global name
    print('函数内部输出全局变量:',name)
    name = 'lisi'
    print('name=',name)
    age = 30 # 局部变量
    print('age=',age)

fun()
print('函数外name:',name)
原文地址:https://www.cnblogs.com/hzshisan/p/12571091.html