python - 5 函数

本文深入探讨Python函数的各个方面,包括函数的理解、定义与调用,带返回值的函数,函数参数(默认参数、可选参数、关键字参数等),参数组合以及变量的作用域。此外,还讲解了高级特性,如迭代、列表生成式、集合生成式、字典生成式和生成器。最后,通过实例展示了如何创建和使用生成器,以及如何在函数中实现斐波那契数列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数理解

函数本身也可以赋值给变量,即:变量可以指向函数。

函数名其实就是指向函数的变量!

##注意:abs为函数名,给abs=1重新赋值后,abs已不是函数,而是一个整数

1.定义函数

定义函数时, 参数称为形参, 这个参数的名字可以任意修改;

def 函数名(形参):
         函数体
         return 返回值

2.调用函数

调用函数:真正执行函数内容

调用函数时的参数称为实参, 这个参数必须有存在的值;

# 函数名(实参)
# print(函数名(实参)


for循环


3.带有返回值的函数

return 关键字, 函数的返回值, 通过print打印;

一般函数都有返回值, 如果在python中没有返回值时, 默认返回None;

函数一旦遇到return, 后面的代码不再执行



4.函数参数

1)默认参数注意事项:
•有多个参数时,变化大放前面,变化小的放后面;
•必选参数在前,默认参数在后

默认参数; 如果只传递一个参数, 那么b默认为2;

# # 如果传递两个参数, a=2,b=4, 覆盖原有的默认值;


2)可选参数

当形参里面是*变量名, 可选参数, 可以传递任意多个参数;


3)关键字参数

•关键字参数允许你传入 0 个或任意个含参数名的参数;
•这些关键字参数在函数内部自动组装为一个 dict;
•关键字参数用**kwargs

# 关键字参数,**变量名可以接收任意多个key-value键值对;
#  接收的变量是字典数据类型;

name, passwd     必选参数


4)参数组合

•参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。
•参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。

5)参数总结

• 必选参数
•默认参数:默认参数一定要用不可变对象
•可变参数:*args 是可变参数,args 接收的是一个 tuple
•关键字参数:**kw 是关键字参数,kw 接收的是一个
dict
•对于任意函数,都可以通过类似 func(*args, **kw) 的形
式调用它


5.函数变量的作用域

• 局部变量:只能在函数内部使用的变量,在函数运行时生效, 函数运行结束则释放;
• 全局变量:在整个程序中使用的变量,作用于整个脚本
• global关键字:强制将局部变量转换为全局变量,只在函数内部生效;


练习:

1.题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53

    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n

输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;

范例:
    输入: 51 5000 10000

    输出: 3



2.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number//2,并返回该值。如果number是奇数,collatz()就打印并返回3*number+1。

然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。


6.函数返回多个值


###判断字符类型

判断字符是否为字符串

判断字符是否为整形或浮点型


练习:

# 函数名get_max_min_avg()
# 函数可以传递任意多个数字, 并且保证是整形或者浮点型;
# 如果满足条件, 返回最大值, 最小值,和平均值;
# 如果不满足条件, 返回None;

# 调用函数, 打印函数结果;

####传递任意多个数字, 可变参数,*args , args是元组数据类型;


7.形参顺序

# *args: tuple
# **kwargs: dict

(常用的)参数顺序: 必选参数 > 默认参数 > 可变参数 > 关键字参数

###默认参数和可变参数存在时顺序不能为默认参数 > 可变参数

(特例): 可变参数 > 默认参数


8.形参的默认值必须为不可变类型

# 可变数据类型: list, set, dict,tuple
# 默认参数的默认值为不可变数据类型(str,int,float,bool,complex);


二 、高级特性---迭代

1.字典迭代


2.迭代key-value值



3.判断对象是否可迭代

from collections import Iterable    判断字符类型函数


4.枚举


三、高级特性---列表生成式

1.列表生成式: 生成列表的公式;


2.列表生成式练习

1)随机生成10个ip地址


2)显示列表, 1~10之间所有数求平方


3)找出/var/log/目录中所有以.log结尾的文件


###以".log" 结尾的文件变为大写,不是以".log" 结尾的文件变为标题


4)找出/etc/目录中所有以.conf结尾的文件, 并把这些文件名转化为大写的文件名


5)列表生成式应用_腾讯编程

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)

- 输出描述:
输出对数

- 示例1 :

```
输入:
    10
输出:
    2

第一种方法:


第二种方法:


第三种方法:


四、高级特性---集合生成式


五、高级特性---字典生成式

1.将字典所有的key值变为大写;

1)传统方法:

2)字典生成式方法:


2.key值变成大写, value值在原有基础上加1:


3.大小写key值合并, 统一以小写key值输出;

##方法一、字母必须要同时出现大写和小写的字母,否则会报错;



##方法二、通用方法


4. 把字典的key和value值调换;


六、生成器

###为什么需要生成器?

通过列表生成式,我们可以直接创建一个列表,受到内存限
制,列表容量肯定是有限的;

创建一个包含 100 万个元素的列表,占用很大的存储空间;

###生成器是什么?
• 在循环的过程中不断推算出后续的元素呢?这样就不必创
建完整的 list,从而节省大量的空间。在 Python 中,这种一
边循环一边计算的机制,称为生成器(Generator)

1。创建生成器

### 把一个列表生成式的 [] 改成 ()

##使用  python3为g.__next__()   python2中为g.next()方法依次读取元素(麻烦)

python3:

python2:


##使用 for 循环(推荐)

##for 循环的底层原理


2.生成器的实质:当无法通过列表生成式表述问题时,如何通过函数实现生成式的功能。

python编程:著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21,...

g = fib(10)  # 如果函数中有yield关键字, 返回一个生成器对象;目前不执行函数内容;
print(g.__next__())   # 当遇到g.__next__方法时, 执行函数, 当遇到yield停止执行; print(g.__next__())时yield后面的值;
print(g.__next__())   # 再次调用g.__next__方法时, 从上次停止的地方继续执行, 遇到yield停止;
g.close()             # 关闭生成器




###迷你机器人###

send方法, 给生成器传递值, 直到遇到下一个yield停止;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值