您现在的位置是:首页 > 编程 > 

【Python】002

2025-07-26 20:42:13
【Python】002 一、定义函数1、概述在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回;代码实例:代码语言:javascript代码运行次数:0运行复制def go(): print("go函数执行了!")2、空函数如果想定义一个什么事也不做的空函数,可以用pa

【Python】002

一、定义函数

1、概述

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回;

代码实例:
代码语言:javascript代码运行次数:0运行复制
def go():
    print("go函数执行了!")

2、空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

代码语言:javascript代码运行次数:0运行复制
def nop():
    pass

pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

代码语言:javascript代码运行次数:0运行复制
if age >= 18:
    pass

缺少了pass,代码运行就会有语法错误;

、参数检查

调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:

代码语言:javascript代码运行次数:0运行复制
my_abs(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given

但是如果参数类型不对,Python解释器就无法帮我们检查:

4、返回多个值

代码示例:
本质解析:

本质上返回的不是两个值,返回的是一个元组(tuple),只是省略了很多;

二、函数的参数

1、位置参数

代码示例:
代码语言:javascript代码运行次数:0运行复制
def power(x):
    return x * x
print(power(6))
说明:

对于power(x)来说,x是一个位置参数,当我们调用power函数时,必须传入有且仅有的一个参数x;

如果是两数之和,例如:

代码语言:javascript代码运行次数:0运行复制
def plus(a, b):
    return a + b
print(plus(6, 9))

其中的a,b都是位置参数;

2、默认参数

代码示例:
代码语言:javascript代码运行次数:0运行复制
def power(x, n=2):  # 我们可以设置默认参数n=2
    return x * n
print(power(6))
print(power(6, 6))
运行结果:
注意:

设置默认参数时,有几点要注意:

一是必选参数在前,默认参数在后,否则Python的解释器会报错;

二是如何设置默认参数;

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

定义默认参数要牢记一点:默认参数必须指向不变对象!

、可变参数

概述:

可变参数就是传入的参数个数是可变的;

集合方式:

(因为Python是弱类型语言,所以这个参数numbers,可以是一个数组,在使用的时候传进去一个数组,就成了可变长度的参数了)

代码语言:javascript代码运行次数:0运行复制
# 计算所有输入数字的和
def calc(numbers):
    sum = 0
    for n in numbers:
        sum += n
    return sum

# list数组list写法
print(calc([1, 2, , 4, 5, 6]))

# tuple元组list写法
print(calc((1, 2, , 4, 5, 6)))
可变参数*方式:

在参数前面加个型号*,标记为可变参数,调用函数传参时可传入任意个参数,用逗号隔开,内部原理是tuple元组接收

代码语言:javascript代码运行次数:0运行复制
# 计算所有输入数字的和
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum += n
    return sum

# 可变参数写法
print(calc(1, 2, , 4, 5, 6))
参数是列表和元素:
代码语言:javascript代码运行次数:0运行复制
# 计算所有输入数字的和
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum += n
    return sum
# list或者tuple
nums = [1, 2, , 4, 5, 6]
# list或者tuple写法,作为参数传入前面加星号*即可,否则报错
print(calc(*nums))

4、关键字参数

概述:

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict;

代码及解释:
代码语言:javascript代码运行次数:0运行复制
# 关键字参数
# 前面算是为固有键传值,后面算是自定义键和值
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
    # 判断是否存在某关键字
    if 'tall' in kw:
        print("有tall这个参数!")

# 在调用该函数时,可以只传入必选参数,也可以传入任意个数的关键字参数
person("訾博",24,tall="18cm",habit="Reading")

# 另一种写法
extra = {'tall': '18cm', 'habit': 'Reading'}
person("訾博",24,**extra)
运行结果:
代码语言:javascript代码运行次数:0运行复制
name: 訾博 age: 24 other: {'tall': '18cm', 'habit': 'Reading'}
有tall这个参数!
name: 訾博 age: 24 other: {'tall': '18cm', 'habit': 'Reading'}
有tall这个参数!

5、命名关键字参数

概述:

关键字参数参数不受限制,命名关键字参数就是限制传进来的参数有哪些;

代码及解释:
代码语言:javascript代码运行次数:0运行复制
# 命名关键字参数
# 前面算是为固有键传值,后面限制传值,可有默认值
def person(name, age, *, tall, habit):
    print('name:', name, 'age:', age, 'other:', 'tall:', tall, 'habit:',habit)

# 命名关键字参数必须传入参数名,这和位置参数不同
person("訾博",24,tall="18cm",habit="Reading")

# 可以设置默认值
def person(name, age, *, tall, habit='Reading'):
    print('name:', name, 'age:', age, 'other:', 'tall:', tall, 'habit:',habit)

# 可以有默认值,有默认值可以不传入,没有默认值的必须传入
person("訾博",24,tall="18cm")

6、参数组合

概述:

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

代码演示:
代码语言:javascript代码运行次数:0运行复制
def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

f1(1, 2)
f2(1, 2, d=99, ext=one)
args1 = (1, 2, , 4)
kw1 = {'d': 99, 'x': '#'}
f1(*args1, **kw1)
args1 = (1, 2, )
kw1 = {'d': 88, 'x': '#'}
f2(*args1, **kw1)
运行结果:
代码语言:javascript代码运行次数:0运行复制
a = 1 b = 2 c = 0 args = () kw = {}
a = 1 b = 2 c = 0 d = 99 kw = {'ext': one}
a = 1 b = 2 c =  args = (4,) kw = {'d': 99, 'x': '#'}
a = 1 b = 2 c =  d = 88 kw = {'x': '#'}
三、递归函数

1、概述

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数;

2、举例

举个例子,我们来计算阶乘n! = 1 x 2 x x ... x n,用函数fact(n)表示,可以看出:

fact(n)=n!=1\times2\times\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times nfact(n)=n!=1×2××⋅⋅⋅×(n−1)×n=(n−1)!×n=fact(n−1)×n

所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

于是,fact(n)用递归的方式写出来就是:

代码语言:javascript代码运行次数:0运行复制
def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)
计算fact(5):
代码语言:javascript代码运行次数:0运行复制
# 递归函数
# 阶乘
def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)

# 5的阶乘
print(fact(5))
运行结果:
代码语言:javascript代码运行次数:0运行复制
120

、小结

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出;

针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环;

Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除优化python递归函数数组

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1199410.html

相关标签:无
上传时间: 2025-07-23 15:21:39

上一篇:【Vue工程】001

下一篇:【Python】001

留言与评论(共有 9 条评论)
本站网友 腮红金
20分钟前 发表
4
本站网友 医改新闻
9分钟前 发表
'Reading'} 有tall这个参数!5
本站网友 西京医院预约挂号网
14分钟前 发表
6))运行结果:注意:设置默认参数时
本站网友 中华词典在线查询
9分钟前 发表
pass还可以用在其他语句里
本站网友 储蓄基金
11分钟前 发表
2
本站网友 km播放器
23分钟前 发表
99
本站网友 高血糖食疗
11分钟前 发表
'other
本站网友 临夏二手房
29分钟前 发表
pass还可以用在其他语句里