牛逼!Python函数和文件操作(长文系列第3篇)(上)

简介: 系列第三篇来说一下函数和文件。函数在编程中是一个很重要的角色,我们可以将若干个语句组合形成一个函数,它可以接受传入参数,并在内部进行相关计算后产生输出,将语句封装成函数是为了避免重复使用几个语句造成代码冗杂,让代码更简洁可观性更强。文件的操作主要是介绍一些关于文件的读取及写入的方法,以及每个方法的不同点和需要注意的事项,最后会介绍一下利用pickle模块存储复杂数据的方式。

函数

函数主要包括两个方面:

  • 内置函数
  • 自定义函数

内置函数就是python自带的一些函数,我们只需要给函数传入相关参数就可以进行调用,print就是最基础、最典型的一个内置函数;而自定义函数是需要我们自己按照需求,封装若干个语句形成一个新的函数。

自定义函数

1.创建函数

下面通过自定义一个计算长方体体积的函数来介绍一些属性词:

In [1]: def  vol(length,width,height):
   ...:     volume = length*width*height
   ...:     return volume

上面三行代码中你需要了解:

  • def:定义函数的关键字
  • length,width,height:函数的形参
  • return:函数的返回值

2.调用函数

建好一个自定义函数后,可以通过函数名(实参)的方式调用函数:

In [2]: vol(2,2,3)
Out[2]: 12

在传入参数时需要注意的是,实参与形参必须完全对应,比如位置、个数等等,否则会出现报错。

In [4]: vol(2,2)
TypeError: vol() missing 1 required positional argument: 'height'

如果想改变传参顺序,那么你需要指定为哪一个形参传值:

In [8]: vol(width=3,length=4,height=5)
Out[8]: 60

3.函数默认值

函数的形参还可以指定默认值,假如我们将上面的vol函数中height参数默认值设为2:

In [6]: def  vol(length,width,height=2):
   ...:     volume = length*width*height
   ...:     return volume
   ...:
In [7]: vol(2,2)
Out[7]: 8

这时只向vol函数中传入两个实参,可以发现没有报错,并且得到返回值为8。也就是说如果一个形参有默认值,而调用函数时没有为这个形参传值,那么这个参数就取默认值。

4.收集函数(可变函数)

对于一个函数的形参我们也可以将其设置为可以变化的:

In [9]: def test(*params):
   ...:     print('参数的长度为%d'%len(params))
   ...:     print('第三个参数为%s'%params[2])
   ...:
In [10]: test(1,2,'mao',3.14,'pp')
参数的长度为5
第三个参数为mao

这里需要将形参用*标识,然后在调用参数的时候可以传入若干个实参。

5.全局与局部

在函数中定义的常量被称为局部变量,也就是仅限在这个函数中可以调用,不接受在函数之外使用:

In [12]: def test(a,b):
    ...:     c = 2
    ...:     return a*b*c
In [13]: test(2,2)
Out[13]: 8
In [14]: print(c)
NameError: name 'c' is not defined

6.匿名函数lambda

如果一个函数内部的语句不是很复杂,代码量很少,我们就可以利用匿名函数,比如上面计算体积的函数:

In [20]: vol = lambda a,b,c:a*b*c
In [21]: vol(2,2,3)
Out[21]: 12

lambda表达式常常嵌套的语句中,结合相关函数使用会很简便,后面会给出例子。

7.内嵌函数

在定义函数时还支持几个函数嵌套,但用的时候需要注意逻辑关系:


相关文章
|
24天前
|
开发者 Python 容器
python函数基础以及函数参数简解
python函数基础以及函数参数简解
|
1天前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
4天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
8天前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
27 6
|
17天前
|
Python
python 函数
【9月更文挑战第4天】python 函数
36 5
WK
|
24天前
|
Python
python中的函数有哪些种类?
在 Python 中,函数根据定义方式、用途及来源可分为多种类型:自带的内置函数(如 print(), len())无需导入直接使用;标准库函数需导入相应模块后使用;第三方库函数则需先安装库再导入使用;用户自定义函数可根据需求定义并多次调用;匿名函数(lambda)无函数名,常用于需要函数对象但不想单独定义的情形;高阶函数接受或返回函数;装饰器函数可在不改动原函数代码情况下为其添加新功能;生成器函数使用 yield 逐个返回值;递归函数在自身定义中调用自身;嵌套函数在一个函数内定义,可访问外部函数变量。各种函数类型在编程中有不同的用途和优势。
WK
39 12
|
23天前
|
Python
Python 中 help() 和 dir() 函数的用法
【8月更文挑战第29天】
19 5
|
24天前
|
Python
12类常用的Python函数
12类常用的Python函数
|
24天前
|
Python
python中getattr函数 hasattr函数
python中getattr函数 hasattr函数
|
24天前
|
算法 Python
python函数递归和生成器
python函数递归和生成器