频道栏目
首页 > 资讯 > Python > 正文

python基础学习五——函数

17-09-04        来源:[db:作者]  
收藏   我要投稿

函数可以将相关功能打包并参数化,在python中,可以创建4种函数:

全局函数:全局对象(包括函数)可以由创建该对象的统一模块(同一个.py文件)中的任意代码存取调用。其他模块也可以调用存取。

局部函数:局部函数定义在其他函数内,只对对其进行定义的函数可见。

lamda函数:是一个表达式,这类函数要比通常的函数收到更多的限制。

方法:方法是与特定数据类型关联的函数,并且只能与数据类型关联在一起使用。

关于python的官方手册,可以登录python官方指南查看,着重利用,Library Reference与 Global Module Index。要着重查询某个数据类型提供了哪些属性(或方法),可以dir(str)函数获取。

参数的返回值可以是单独的一个值,也可以是一组值,还可以是组合类型的值。如果return不带参数,或者根本就没有使用return语句,那么函数将返回None。

1.默认参数

使用parameter = default可以指定函数的一个默认参数,当调用函数时,可以不传递给函数该参数而使用默认值。默认参数应当放置在位置参数之后。

给定默认值时,默认值实在定义def函数时创建的,而不是调用时创建的。例如:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()
out:5

最常见的情况为:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

输出为

[1]
[1, 2]
[1, 2, 3]

因此对于列表,字典,集合等可变数据类型,应当使用如下方式定义:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

2.参数与参数拆分
(1)我们可以使用序列拆分操作符*来提供位置参数,例如,function(*list),如果列表包含的数据项多于函数的参数,则可以使用分片的方法,如下是一个使用序列拆分符号的函数形式:

def cal_area(a,b,c):
    return a*b*c

k = [10,11,12]
print(cal_area(*k))

(2)使用拆分操作符创建可变数量的位置参数的函数。

def sum_up(*args):
    sum1 = 0
    for arg in args:
        sum1 = sum1 + arg;
    return sum1

k = [1,2,3,4,5,6,7,8,9]
print(sum_up(*k))

在函数有一个args参数,参数前有一个序列拆分符,在函数内部,参数args可以是一个元组,其项数随着给定的位置参数个数的变化而变化。我们可以将关键词参数跟在位置参数的后面:

def sum_up(*args,power = 10):
    sum1 = 0
    for arg in args:
        sum1 = sum1 + arg * power;
    return sum1

将*本身作为参数也是可能的,用于表明在*不应该再出现位置参数,但关键字参数是允许的。

def sum_up(a,b,c,*,power = 10):
    return a*b*c*power

print(sum_up(10,2,3))

*表明,只有三个位置参数。
(3)映射操作符
我们可以使用映射操作符来对映射进行拆分,可以使用**将字典传递给函数。
才赋值时,参数的名称与键对应,如果该字典包含没有对应参数的键,就会产生TypeError异常,任何参数,如果字典没有相应的项,则将其设置为默认值——如果没有默认值,就产生TypeError异常。因此利用**可以定义任意数量的关键词参数函数。

def print_info(**args):
    for key in args:
        print(key,':',args[key])

k = dict(name='kai',gender = 'man',age=10)
print_info(**k)

(4)存取全局范围的变量

Language = False
def a_function():
    if Language == True:
        print('True')
    else:
        print('False')

如上所示,python处理该函数时,会先在局部(a_function())范围内进行查找,由于没有找到,有在全局(.py)范围内进行查找,并找到其定义位置。

Language = 1
def a_function():
    global Language
    Language = 2

a_function()
print(Language)

global的用法为,告诉python,这个变量为全局变量,而不是创建一个同名的本地变量。如果没有global语句,程序也可以运行,python会在局部范围内查找,由于找不到就创建一个Language局部变量,而不改变全局的Language变量。
(5)lambda函数

lambda parameters : expression

lambda函数的expression不能包含分支或者循环(但允许使用条件表达式),也不能包含return或yield语句,调用lambda函数时,返回的结果是对表达式计算产生的结果。如果expression是一个元组,就应当使用()将其括起来。

area = lambda a,b,c:a*b*c
print(area(1,2,3))

(6)断言

def a_function(*args):
    assert all(args),'0 argument'
    sumup = 0
    for arg in args:
        sumup = sumup + arg
    return sumup
k = [0,1,2,3,4]
print(a_function(*k))

在函数有错误或进行不正确计算时,可以使用断言进行测试,语法格式如下:

assert boolen_expression,optional_expression

当boolen_expression为False时,产生一个AssertionError异常,如果给定了optional_expression,则将其最为AssertionError的一个参数。

WALDM

相关TAG标签
上一篇:CodeForces - 825C Multi-judge Solving(简单题)
下一篇:Make your own Neural NetWork之代码详解下
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站