Python基础:自定义函数及函数基本使用

文章目录

    • 自定义函数及函数基本使用
      • 语法
        • 函数的调用与注释及小知识点
      • 函数的参数
        • 必须参数
        • 关键字参数
        • 默认参数
        • 混合使用
        • 递归

自定义函数及函数基本使用

函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()等。也可以创建用户自定义函数。说白了就是将一系列的代码封装起来,实现代码的复用。

语法

函数的代码块以 def 开头,后面接函数标识符名称和小括号 () ,也可以传入参数和自变量,传参和自变量必须放在小括号内。
函数的内容,以冒号开始,并且缩进。
如果函数有返回值,使用 return(expression) 结束函数,不带return 表达式等同于返回 none

函数的调用与注释及小知识点

函数中,通常使用三个单引号来注释说明函数的作用;
函数体内容不能为空,可以使用 pass 占位符来表示空语句;
下面我们来看一下几个简单的函数样例

#自定义函数
def func_name(a):		#关键字	函数名称(参数):
	'''函数体注释'''
	pass				#占位符
	'''
	def:是python的关键字,专门用来自定义函数的
	func_name:是函数名,用以以后调用的
	(a):a为函数的参数,为函数里面的操作提供数据使用的
	pass:为占位符,函数体不可为空,不写占位符会报错
	'''

def my_print():
	print("哈士奇")
	
my_print()		#调用上文的自定义函数,打印输出"哈士奇"


def my_print_name():
	print(__name__)

if __name__=="__main__"
	my_print_name()

'''
__name__的作用:只有在本模块启动的时候,__name__ 才会等于 __main__
__main__:主函数 
那么 __name__ 在什么时候使用呢?
1、作为入口模块在别的语言当中,main也可以作为入口函数
2、也可以作为调试使用。
  原因是:在其他模块调用本模块时,__name__==__main__的结果会判断为 false ,所以不执行。

在其他模块的调用的方式
from def_my_func import my_print_name	
#这里的 def_my_func 是模块名,不是上文打印输出"哈士奇"的自定义函数
my_print_name()							
#打印输出结果为 "def_my_func"
#这里验证了上述的  只有在本模块启动的时候,__name__ 才会等于 __main__
'''

附:name 可以理解为特殊的系统预留的一个变量

函数的参数

必须参数

#必须参数
def my_func_1(p1,p2)
	print(p1)
	print(p2)

my_func_1(1)			
'''
这里只传入 一个参数
执行打印输出会报错:TypeError:my_func_1() missing 1 required positional argument:'p2'
缺失了参数 p2 ,所以才报错。
'''

既然讲到了参数,就不得不说一下形参与实参
形参:形式参数。是一种意义上的参数,在定义的时候并不占用内存地址
实参:实实在在的参数,占用了内存地址。

def my_func_1(p1,p2):这里的 p1,p2 就是形参
my_func_1(1): 这里的(1),就是实参

关键字参数

#关键字参数
def my_func_2(name,age)
	print(name)
	print(age)

my_func_2(name="zhou",age=30)	#指定参数
my_func_2(age=30,name="zhou")	#可以不按照顺序传参数,输出的结果是一致的
'''
输出的结果为 zhou 30
'''

默认参数

#默认参数
def my_func_3(name="zhou",age=30)
	print(name)
	print(age)

my_func_3("Tony")		#输出结果为  Tony  30

混合使用

#混合使用
def my_func_4(name,age=30)
	print(name)
	print(age)
	
my_func_4("zhou",35)

递归

#递归
def my_func_5(x):
	print(x)
	my_func_5(x+1)
my_func_5(1)			#自己调用自己的过程叫递归 

'''
Python中存在一种机制防止栈溢出,所以上述代码输出到997就会自行结束,如果是其他语言,就会出现把自己写死的情况。

递归涉及 堆、栈、内存调度的内容较多
这里不进行过多的介绍,后续会有详细的篇幅进行讲解
'''

我们再来看一个小例子

def f(x):
	if x == 1:
		return 1
	print("计算" + str(x) + "+" + str(x-1))
	return x + f(x-1)

print(f(5))		#打印输出的结果为:15,其实整个计算过程为 5+4+3+2+1
					#5 + (5-1) + ((5-1)-1) + (((5-1)-1)-1) + ((((5-1)-1)-1)-1)
'''
递归算法解决问题的特点:
1、在函数中,自己调用自己
2、必须要明确递归结束的条件,否则就成为了死循环了
3、写法简洁,缺点是递归的效率低,用不好就栈内存溢出了
'''

递归算法解决问题的特点:
1、在函数中,自己调用自己
2、必须要明确递归结束的条件,否则就成为了死循环了
3、写法简洁,缺点是递归的效率低,用不好就栈内存溢出了

你可能感兴趣的:(python基础,Python学习之路)