Python学习入门之函数(一)
文章目录
- 系列文章目录
- 前言
- 一、函数是什么?
- 二、函数的定义和使用
- 三 、函数的参数
- 四、 函数的嵌套
- 五 、 递归函数
- 总结
前言
函数是Python的基础,可以说是Python这座摩天大楼的基础,学好这章内容,对后期学习随机森林等起重要作用,本文就介绍函数的基础内容。
一、函数是什么?
1.1.1 函数是一段具有特定功能的、可重复使用的代码段,它能够提高程序的模块化和代码的复用 率。 Python提供了很多内建函数(如print()、input()、int()函数等) 标准库函数(如math库 中的sqrt()函数
用户还可以自己编写函数,称为自定义函数。
1.1.2 在Python中,定义函数的一般形式为:
def 函数名([形式参数列表]):
函数体
使用def关键字来定义函数
函数名可以是任何有效的Python标识符
函数名后的圆括号内是形式参数列表(简称形参),形式参数列表是调用该函数时传递给它的 值,可以有零个、一个或多个,当传递多个参数时各参数之间由逗号分隔。
函数体是函数每次被调用时执行的代码,由一行或多行语句组成。
1.1.3
(1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号。
(2)括号后面的冒号不能省略。
(3)函数体相对于def关键字必须保持一定的空格缩进。
1.1.4 定义了函数后,就相当于有了一段具有特定功能的代码,要想执行这些代码,需要调用函 数。函数调用的一般形式为:函数名([实际参数列表])
示例1:
运行效果:
1.1.5 函数的返回值
如果函数没有return语句,Python将认为该函数以return None结束,即返回空值。
函数也可以用return语句返回多个值,多个值以元组类型保存
二、函数的参数
2.1实参和形参
定义函数时,圆括号内是使用逗号分隔的形式参数列表(简称形参),调用函数时向其传实参,根据不同的参数类型,将实参的值或引用传递给形参。(这里初学者比较难理解,不过多 看几遍例子就能理解)
2.1.1传值
定义函数时,圆括号内是使用逗号分隔的形式参数列表(简称形参),调用函数时向其传递实参,根据不同的参数类型,将实参的值或引用传递给形参。
示例2:
运行效果:
2.1.2传引用
但当参数类型为可变数据类型(如列表、字典、集合等)时,在函数内部使用下标或其他方式为其增加、删除元素或修改元素值时,修改后的结果是可以反映到函数之外的,即实参也会得到相应的修改。
示例3:
def changeme(mylist):
mylist.append([1,2,3,4])
print("函数内取值: ", mylist)
return
mylist = [10,20,30]
changeme(mylist)
print ("函数外取值: ",mylist)
运行效果:
2.2参数类型
2.2.1位置参数
调用函数时,实参和形参的顺序必须严格一致,并且实参和形参的数量必须相同,否则将报错。
2.2 .2默认值参数
在定义函数时,可以为函数的参数设置默认值,这个参数被称为默认值参数。带有默认值参数的函数定义语法如下:
def 函数名(…,形参名=默认值):
函数体
在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,也可以通过显式赋值来替换其默认值。
注意:在定义带有默认值参数的函数时,默认值参数必须出现在函数形参列表的最右端,否则会提示语法错误。
多次调用函数并不为默认值参数传递值时,默认值参数只在定义时进行一次解释和初始化,对于列表、字典这样可变类型的默认值参数,这一点可能会导致逻辑错误。因此,一般来说,要避免使用列表、字典、集合或其他可变数据类型作为函数参数的默认值。
小技巧:可以使用“函数名.__defaults__”随时查看函数所有默认值参数的当前值,其返回值为一个元组,其中的元素依次表示每个默认值参数的当前值。
示例4:
def printinfo( name, age = 35 ): #定义函数,打印任何传入的字符串
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
print(printinfo.__defaults__) #输出函数默认值参数
printinfo("root" ,50) #显式赋值
print ("------------------------")
printinfo("root" ) #使用默认值参数
运行效果:
如果在定义函数时某个参数的默认值为一个变量,那么参数的默认值只依赖于函数定义时该变量的值。
示例5:
a = 1
def f(n = a):
print(n)
a = 5
f()
运行效果:
2.2.3关键字参数
关键字参数是指调用函数时的参数传递方式,是一种按参数名字传递值的方式。使用关键字参数允许函数调用时参数的顺序与定义时不一致,Python解释器能够用参数名匹配参数值。
示例6:
def printinfo(name, age):
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo(age=50, name="runoob")
运行效果:
2.2.4不定长参数
通常在定义一个函数时,若希望函数能够处理比定义时更多的参数,此时可以在函数中使用不定长参数。
def 函数名([形参列表,] *args, **kwargs):
函数体
*args 用来接收任意多个实参并将其放在一个元组中
**kwargs用来接收类似于关键字参数一样显式赋值形式的多个实参并将其放入字典中
示例7:
def f(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
f(1, 2, 3, 4, 5, x = 6, z = 7)
运行效果:
三、函数的嵌套
3.1嵌套定义
Python允许函数的嵌套定义,即在函数内部可以再定义另外一个函数。
示例8:以下代码就是在print_line()函数中嵌套定义了print_text()函数
def print_line(): #定义print_line()函数
print("************")
def print_text(): #嵌套定义print_text()函数
print("Hello world!")
print_text() #调用print_text()函数
print_line() #调用print_line()函数
运行效果:
3.2嵌套调用
Python还允许在一个函数中调用另外一个函数,这就是函数的嵌套调用。
示例9:计算1!+2!+3!+…+10!的值并输出,使用函数的嵌套调用实现。
def fac(k): #定义fac函数,计算阶乘
i = 2
t = 1
while i <= k:
t *= i
i = i + 1
return t #返回阶乘结果
def sum(n): #定义sum函数,求累加
s = 0
i = 1
while i <= n:
s = s + fac(i) #调用fac函数
i += 1
return s #返回累加结果
print('1!+2!+3!…10!=',sum(10)) #调用sum函数
运行效果:
四、递归函数
Python支持函数的递归调用,所谓递归就是函数直接或间接地调用其本身。
直接递归调用 间接递归调用
这两种递归调用都是无休止地调用自身。因此,为了防止无限递归,所有递归函数都需要设定终止条件。
示例10:计算n的阶乘。
def f(n): #定义递归函数
if n==1: #当n等于1时返回1
return 1
else: #当n不为1是返回f(n-1)*n
return f(n-1)*n
n = int(input('请输入一个正整数:')) #输入一个整数
print(n,'的阶乘结果为:',f(n)) #调用函数f并输出结果
运行效果:
总结
以上就是今天要讲的内容,本文仅仅简单介绍了函数的部分知识,而函数在后期的运用非常频繁。
学无止境,加油!