从C到Py:Python中的函数

在本篇文章中,我们将讲解Python中有关函数的部分,如果掌握C语言的基础,那不难发现Python中函数的知识实际也十分相似。

定义

python中定义函数的语法格式:

def 函数名(参数列表):

        函数体

        return 返回值列表

函数名自己定义,不能与保留字等冲突,不能用空格链接,最好替换成下划线。函数体部分实现函数的功能,最后返回值。与C语言相比,python的函数定义过程较为简洁,要求也更宽松。

以下是一个简单的求和函数的实例:

def get_sum(num):
    s=0
    for i in range(1, num+1):
        s+=i
    print(f'1加到{num}的和为:{s}')

传参

1、位置传参

调用时参数个数和顺序必须定义相同。

2、关键字传参

调用时使用“形参名称=值”  顺序可以与定义时不同。

def happy_birthday(name, age):
    print('祝'+name+'生日快乐')
    print(str(age)+'岁生日快乐')


happy_birthday(age=18, name='abc')
# 这里使用关键字传参替换了age和name的位置

PS:一个函数调用可以同时使用以上两种传参

3、默认值传参

在定义时直接对形参赋值,调用时如果不传参,将使用默认值

PS:如果同时使用位置参数,默认值参数,需要将默认值参数置于最后。

4、可变参数

①:个数可变的位置参数

在参数前加一颗星 *para ,调用时可接收任意个数的实际参数,并放到一个元组中。

以下为示例:

def fun(*para):
    print(type(para))
    for item in para:
        print(item)


fun(10, 20, 30, 40)
fun(10)
fun([11, 22, 33, 44, 55])
# 以下为输出结果
# <class 'tuple'>
# 10
# 20
# 30
# 40
# <class 'tuple'>
# 10
# <class 'tuple'>
# [11, 22, 33, 44, 55]

②:个数可变的关键字参数

在参数前加两颗星 **para ,调用时可接收任意多个“参数=值”形式的参数,并放到一个字典中。

PS:若要传递字典d,参数写 **d 进行系列解包操作

返回值

这一部分依旧不难理解,就是函数在调用时返回的数值。值得注意的是,python中函数返回值如果是多个,返回结果为元组类型。下面看一个求和函数,他将分别返回奇数和、偶数和以及总和:

def get_sum(num):
    s=0
    odd_sum=0
    even_sum=0
    for i in range(1, num+1):
        if i % 2 !=0:
            odd_sum+=i
        else:
            even_sum+=i
        s+=i
    return odd_sum, even_sum, s


print(get_sum(10))
a, b, c=get_sum(10)
print(a)
print(b)
print(c)
# 以下为输出结果
# (25, 30, 55)
# 25
# 30
# 55

作用域

在函数内部定义的变量称为局部变量,定义在函数外(准确来说是所有程序之前)的变量称为全局变量。不同的变量有不同的作用域,或者说生命周期,简言之我们只需记住在函数内部定义的变量,只能在函数内部操作。

匿名函数lambda

这是Python独有的一种函数,没有名字,只能使用一次,一般在函数体只有一句代码且只有一个返回值时,可用匿名函数来简化

语法格式:result=lamada 参数列表:表达式  (result直接得到表达式的返回值)

例如,以下两种函数的写法是相当的:

def calc(a, b):
    return a+b


print(calc(1,2))

s=lambda a, b: a+b
print(type(s))

print(s(10, 20))
# 输出结果
# 3
# <class 'function'>
# 30

内置函数

下面介绍一些Python自带的内置函数。

1、类型转换函数

函数名称描述说明
bool(obj)获取指定对象obj的布尔值

str(obj)

将指定对象obj转成字符串类型

int(x)

将x转成int类型
float(x)将x转成float类型
list(sequence)将序列转成列表类型
tuple(sequence)将序列转成元组类型
set(sequence)将序列转成集合类型

2、数学函数

函数名称描述说明

abs(x)

获取x的绝对值
divmod(x,y)

获取x与y的商和余数

max(sequence)获取sequence的最大值
min(sequence)获取sequence的最小值
sum(iter)对可迭代对象进行求和运算
pow(x,y)获取x的y次幂
round(x,d)对x进行保留d位小数,结果四舍五入

3、迭代器操作函数

常见的可迭代对象有:字符串、列表、元组

函数名称操作说明
sorted(iter)对可迭代对象进行排序
reversed(sequence)反转序列生成新的迭代器对象
zip(iter1,iter2)将iter1与iter2打包成元组并返回一个可迭代的zip对象
enumerate(iter)根据iter对象创建一个enumerate对象
all(iter)判断可迭代对象iter中所有元素的布尔值是否都为True
any(iter)判断可迭代对象iter中所有元素的布尔值是否都为False
next(iter)获取迭代器的下一个元素
filter(function,iter)通过指定条件过滤序列并返回一个迭代器对象(这里的function是一个函数)
map(function,iter)通过函数function对可迭代对象iter的操作返回一个迭代器对象

PS:迭代器对象的类型是 class 'List_reverseiterator

针对最后两个函数进行举例:

# 此函数对奇数返回True
def fun(num):
    return num % 2==1


obj=filter(fun, range(10))
# filter将对1~9调用fun函数进行判断,为真则添加到迭代器对象中
print(list(obj))

# 输出结果:[1, 3, 5, 7, 9]

下面这个函数实现转换大小写:

def upper(x):
    return x.upper()


lst=['hello', 'world', 'Python']
obj2=map(upper, lst)
print(list(obj2))

# 输出结果:['HELLO', 'WORLD', 'PYTHON']

4、其他函数

函数名称描述说明
format(value,format_spec)将value以format_spec格式显示
len(s)获取s的长度或s元素的个数
id(obj)获取对象的内存地址
type(x)获取x的数据类型
eval(s)执行s这个字符串所表示的Python代码

这里再详述一下第一种函数:

print(format(3.14, '20'))  # 数值默认右对齐
print(format('hello', '20'))  # 字符串默认左对齐
print(format('hello', '*>20'))  # *是填充符,<是左对齐,>是右对齐,20是显示宽度
print(format(3.1415926, '.2f'))
# 输出结果
#                 3.14
# hello               
# ***************hello
# 3.14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值