个人主页:【😊个人主页】 系列专栏:【❤️Python】
文章目录
- 前言
- Python 函数
- 关于程序函数
- 函数的定义
- 函数调用
- 参数与参数传递
- 参数类型
- 位置参数
- 关键字参数
- 默认参数
- 可变参数(*args)
- 关键字可变参数(**kwargs)
- 可更改(mutable)与不可更改(immutable)对象
- 可更改(mutable)对象
- 不可更改(immutable)对象
- 匿名函数
- return
- 扩展知识:程序函数与数学函数
- 数学函数
- 程序函数
前言
如果在之前对编程有过一定了解的小伙伴想必对函数这个概念一定不陌生,通过函数我们可以实现将某一功能反复使用,这极大的提升了代码的重复利用率,使得程序更加简洁。今天我们就来详细的介绍一下Python中的函数。想了解更多Python内容请订阅内容【Python系列教程】
Python 函数
关于程序函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率
Python 使用 def 关键字来定义函数,后跟一个函数名和圆括号 (),圆括号中可以包括一些变量名(即参数)。函数的第一行语句可以选择性地使用文档字符串(docstring),用于存放函数的说明。函数体通过缩进来定义。
函数的定义
//def 函数名():
代码
---
//def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
函数调用
当我们完成了一个函数的定义,给了函数一个名称,指定了函数里包含的参数,和代码块结构,函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
def print(str):
"打印任何传入的字符串"
print(str)
return
# 调用函数
print("我要调用用户自定义函数!")
print("再次调用同一函数")
参数与参数传递
参数类型
- 位置参数:调用函数时根据函数定义的顺序传入的参数。
- 关键字参数:函数调用时通过参数名指定参数的值。
- 默认参数:在函数定义时,为参数提供默认值。调用函数时,如果没有为这些参数提供值,则使用默认值。
- 可变参数:使用 *args 允许函数接收任意数量的位置参数(非关键字参数),这些参数在函数内部被组织成一个元组。
- 关键字可变参数:使用 **kwargs 允许函数接收任意数量的关键字参数,这些参数在函数内部被组织成一个字典。
在 python 中,类型属于对象,变量是没有类型的
位置参数
位置参数是最基本的参数形式,函数调用时参数的顺序必须和函数定义时参数的顺序一致。
def greet(name, greeting):
print(f"{greeting}, {name}!")
# 调用时,必须按照定义时的顺序传入参数
greet("Alice", "Hello") # 输出: Hello, Alice!
关键字参数
关键字参数允许你通过参数名来指定参数的值,这使得参数的顺序变得不重要。
def greet(name, greeting):
print(f"{greeting}, {name}!")
# 使用关键字参数,参数的顺序可以任意
greet(greeting="Hello", name="Alice") # 输出: Hello, Alice!
默认参数
默认参数是在函数定义时给参数指定一个默认值,如果在函数调用时没有提供这个参数的值,那么就会使用这个默认值。
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
# 调用时没有提供greeting参数,将使用默认值"Hello"
greet("Alice") # 输出: Hello, Alice!
# 调用时提供了greeting参数,将使用提供的值
greet("Bob", "Hi") # 输出: Hi, Bob!
可变参数(*args)
可变参数使用星号(*)前缀,允许你向函数传递任意数量的非关键字参数。在函数内部,这些参数被收集到一个名为args的元组中(尽管你可以使用任何名称,但args是约定俗成的)。
def sum_numbers(*args):
total = 0
for number in args:
total += number
return total
# 调用时,可以传递任意数量的参数
print(sum_numbers(1, 2, 3)) # 输出: 6
print(sum_numbers(10, 20)) # 输出: 30
关键字可变参数(**kwargs)
关键字可变参数使用两个星号(**)前缀,允许你向函数传递任意数量的关键字参数。在函数内部,这些参数被收集到一个名为kwargs的字典中(同样,你可以使用任何名称,但kwargs是常用的)。
def greet(**kwargs):
for key, value in kwargs.items():
print(f"{key.capitalize()}: {value}")
# 调用时,可以传递任意数量的关键字参数
greet(name="Alice", age=30, city="New York")
# 输出:
# Name: Alice
# Age: 30
# City: New York
可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
可更改(mutable)对象
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了
# 可写函数说明
def change( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4])
print "函数内取值: ", mylist
return
# 调用change函数
mylist = [10,20,30]
change(mylist)
print("函数外取值: ", mylist)
不可更改(immutable)对象
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a
def Change( a ):
a = 10
b = 2
Change(b)
print(b) # 结果是 2
匿名函数
lambda [arg1 [,arg2,.....argn]]:expression
- lambda只是一个表达式,函数体比def简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为 : ", sum( 10, 20 ))
print("相加后的值为 : ", sum( 20, 20 ))
return
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
def sum(arg1, arg2):
# 返回2个参数的和."
total = arg1 + arg2
print("函数内 : ", total)
return total
# 调用sum函数
total = sum(10, 20)
扩展知识:程序函数与数学函数
数学函数
数学函数是数学中的一个基本概念,它描述了变量之间的一种关系,其中一个变量(通常称为自变量)的值变化时,另一个变量(称为因变量)按照某种确定的规则也相应地变化。数学函数可以用数学表达式来表示,例如 f(x) = x^2
,其中 f
是函数名,x 是自变量,x^2
是函数规则,表示自变量 x
的平方。
程序函数
程序函数是编程语言中的一个基本构造,它封装了一段可重用的代码,以完成特定的任务。与数学函数类似,程序函数也接受输入(参数),执行一系列操作,并可能返回输出(返回值)。但程序函数更加强调代码的模块化和复用性,以及它们在程序流程控制中的作用。