Python函数和模块


1.函数介绍

在 Python 语言中,函数可分为内置函数和自定义函数。
内置函数也称作内建函数,是 Python 自带的函数,无需导入任何函数库即可直接调用。常用的内置函数有 print()、input()、range()等。
自定义函数就是将一段有规律的、可重复使用的代码定义成函数,以提升代码的复用率和可维护性。

1.1函数定义

在 Python 语言中,函数通常是由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:

def 函数名(参数列表):
	函数体

1) 函数代码块以关键字“def”开头,后接函数标识符名称和形参列表;
2) 为方便后期维护,函数标识符名称最好能够体现出函数的功能;
3) 参数列表用于设置该函数可接收的参数,多个参数之间用逗号“,”分隔;
4) 任何传入的参数和自变量必须放在括号“()”内;
5) 函数内容以冒号“:”起始,且严格统一缩进;
6) 函数的第一行语句可选择性地使用文档字符串,即函数说明;
7) 函数都有返回值,默认返回“None”。

1.2形参和实参

在编程语言中,函数定义时采用形参,调用时采用实参。两者的功能是数据传送。
1) 形参(parameter)
形参,即形式参数,不是实际存在的变量,因此又称虚拟变量。形参是在定义函数名和函数体时使用的参数,用于接收调用该函数时传入的参数,其作用域一般仅限函数体内部。
2) 实参(argument)
实参,即实际参数,是在调用时传递给函数的参数,可以是常量、变量、表达式、函数等,其作用域根据实际设置而定。

无论何种类型的实参,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。以下图代码为例,函数 area()定义处的“width”和“height”是形式参数,而函数体外
定义的变量“w”和“h”则是实际参数。

#计算矩形面积的函数area()
def area(width,height):
	return width*height
#调用area函数
w=4
h=9
print("width"=,w,"height=",h,"area=",area(w,h))

将实参“w”和“h”传入函数体后,相应的值就被赋予形参“width”和“height”。形参“width”和“height”的作用域只限于 area()函数体内,而实参“w”和“h”的作用域则根据外部调用处的设置而定

1.3 函数返回值

在函数执行完成后,系统根据函数的具体定义,将某些值反馈至外部调用者,该值则称为函数的返回值。

在 Python 语言中,当函数运行到 return 语句,即表示函数执行完毕,会返回指定值。
若函数内部没有

需要注意的是,在 Python 语言中,函数可拥有多个返回值,以下列代码为例:

#函数定义
def area_c(x,y):
	return x+y,x*y
#函数调用
a,b=area_c(x=1,y=2)
print(a,b)

函数内有两个返回值,分别是“x+y”和“x*y”,调用该函数后,两个返回值分别赋予变量“a”和变量“b”。

2.函数传递

函数参数分为可变类型和不可变类。

2.1可变类型

可变类型的调用类似 C++的引用传递。如果传递的参数是可变类型,如列表、字典等,
函数内部对传入参数的修改会影响到外部变量。
以下图代码为例,change_int()函数内部对传入的列表“list_01”进行修改后,外部的变
量也会被更改。change_int()函数内的“append”作用为向列表内添加元素,这里我们将列
表“[1,2,3]”作为元素添加到列表 list_01。

def change_int(list_01):
	list_01.append([1,2,3])	#修改传入的列表
	print("函数内修改后的变量:",list_01)
list_01=[10,20,30]
change_int(list_01)
print("函数外变量的值:",list_01)

2.2不可变类型

不可变类型的调用类似 C++的值传递。如果传递的参数是不可变类型,如整型、字符串、元组等,函数内部对传入参数的修改不会影响到外部变量。
以下图代码为例,变量“b”指向 int 对象“2”,在传递至 unchange_int()函数时,按传值方式复制变量“b”,即变量“a”和变量“b”都指向了同一个 int 对象“2”。
然而,当执行“a = 10”,变量“a”指向新生成的 int 对象“10”。因此,外部变量未发生改变,程序打印的数值应为“2”。

def unchange_int(a):
	a=10
b=2
unchange_int(b)
print(b)

3.参数类型

3.1位置参数

调用函数时,每个实参都按照位置顺序关联至对应的形参,这种关联方式即为位置参数。
以下图代码为例,调用 describe_student()函数时,需要依次提供姓名和年龄这两个参数,
则实参“Jack”和“18”分别存储至形参“person_name”和“student_age”中。

def decribe_student(person_name,student_age):
	print("My name is",person_name)
	print(person_name+"is"+student_age+"years old")
describe_student('Jack','18')

3.2 默认参数

自定义函数时,可以为每个形参指定默认值。调用函数时,若给形参提供了实参,则采用指定实参;否则,采用形参的默认值。
以下图代码为例,将形参“student_age”的默认值设定为“18”。当调用 describe_student()函数时有为形参“student_age”提供实参,则采用指定实参,此处为“20”;否则,采用
默认值“18”。

def decribe_student(person_name,student_age='18'):
	print("My name is",person_name)
	print(person_name+"is"+student_age+"years old")
describe_student('Jack','20')
describe_student('Jack')

3.3 不定长参数

在 Python 语言中,函数还可以定义不定长参数,也叫可变参数。在标识符前面添加“*”即可将对应参数定义为不定长参数。
以下图代码为例,将参数“number”定义为不定长参数后,在调用 calculate()函数时,即使传入参数不是列表或元组,函数也可直接使用。

def calculate(*numbers):
	sum=0
	for n in numbers:
		sum=sum+n
	return sum
print(calculate(1,2,3,4))
print(calculate())

3.5 命名关键字参数

当需要限制参数只能按关键字进行传递时,可以采用命名关键字参数。在自定义函数时,
用“”分隔形参,“”后面的形参即为命名关键字参数。

def decribe_student(person_name,student_age,*,live_city):
	)
	print(person_name+"is"+student_age+"years old"+"in"+live_city)
describe_student('Jack','20',live_city='huludao')

4.模块介绍

一般情况下,模块(module)就是一个后缀名为“.py”的文件。此外,还有其他可作
为 module 的文件类型,如“.pyo”、“.pyc”、“.pyd”、“.so”、“.dll”,但 Python 初
学者暂不需要接触相关内容。
将能够实现某一特定功能的代码封装为一个独立的模块,这样既可以方便其它程序或脚
本导入及使用,又可以有效避免函数名和变量名发生冲突。模块的来源有三种:
1) Python 内置模块(标准库);
2) 第三方模块;
3) 自定义模块。
当需要调用某个模块的函数,需要先通过 import 语句导入该模块后,再对函数进行调
用。常用的导入方法有两种(中括号“[]”里的内容可省略):
1) import 模块名称[ as 别名]
使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、
类等)。当需要使用模块中的成员时,需用该模块名(或别名)作为前缀。
7
2) from 模块名称 import 成员名称[ as 别名]
使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。同
时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值