ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

10_函数

2022-04-02 02:31:20  阅读:113  来源: 互联网

标签:10 return 函数 递归 print 实参 def


# 函数
'''
函数就是完成特定功能的代码块,是对代码的封装。
函数的特点:
代码可复用
代码可维护性搞
容易排错
可读性好
利于团队开发

函数语法:
def 函数名([参数1],[参数2]、、、)
函数体

函数的命名规则:
函数名命名规则与变量名相同,要满足标识符名规则
不能和系统函数重名,否则系统函数无法使用
函数定义分为两部分,函数头和函数体
函数体就是实现功能的代码块,以: 开头,必须缩进
函数名的命名风格:一般使用下划线分隔的小写单词组成:num_random
eg:
def table(row,col):
for i in range(1, row + 1):
for j in range(1, col + 1):
if j <= i:
print("%d*%d = %2d" % (i, j, i * j), end=' ')
print('')
#⼀次编码,到处运⾏
table(8,8)
table(5,5,8)


'''

# 2.函数参数
'''
实参和形参
形参:就是函数定义时小括号里的变量
实参:函数调用的时候,小括号里的表达式
函数可以没有形参和实参

参数分类
位置参数,要求实参顺序必须和形参顺序完全一致,由形参顺序决定实参顺序

def say_hello(name,age,home): ==>name就是形参
print(你好,我的名字叫{},今年{}岁,来自{})

say_hello('张三',18,'叙利亚') ==> 张三就是实参,实参和形参个数必须相同且顺序要求相同

关键字参数,函数调用时,实参可以是键值对,键就是形参名,这样的调用,实参不必关心形参的顺序

def say_hello(name,age,home):
print(你好,我的名字叫{},今年{}岁,来自{})

say_hello(name='张三',age=18,home='叙利亚')

函数默认值,如果形参在定义的时候给定一个值,那么函数在调用时就可以不用传实参,简化调用
默认值参数必须放在参数的最右边
如果传入了实参,那么实参有限调用,不会使用默认值
默认值只计算一次
默认值必须是不可变对象

def num_calculate(x,n=2):
return (x*n)

num_calculate(5)
num_calculate(5,0.5)

def test(a=[]):
a.append('end')
print(a)

test([1,2,3]) ==>[1,2,3,end]
test() ==>['end']
test() ==>['end','end']

可变参数
传入的参数个数是可变的,可以是1个或者多个,还可以是0个。
使用*接收任意数量的参数
*的不定长参数会被当做元组处理

def demo(a,b,*args):
print(a,b,args)

demo(11,22) => 11,22,()
demo(1,2,3,4,5)
a=(1,2,3)
demo(*a) ==> 1,2,(3,) *解包

使⽤**接收任意数量的关键字参数
**的不定⻓参数被当做字典处理
def demo1(a,**args):
print(a,args)

demo1(1,name='kk',age=3)
b = {'a':20,'b':12,'c':32}
demo(**b)

参数组合
形参顺序需要按照以下顺序:位置参数、默认值参数、*args、**kwargs
'''

# 3.函数的调用
'''
函数调用必须在函数定义之后
函数调用必须能够正确传递实参

def demo(a,b,c=0,*arg1,**arg2):
print(a,b,c,arg1,arg2)
demo(1,3,k=4)
demo(1,2,3,4,5)
demo(1,b=3,c=3,d=5)
demo(*(1,2,3),**{'name':12}) ==> 任何函数都可以通过这种方式传递实参
'''

# 5.函数返回值
'''
可以通过return语句返回计算结果。语法:return 表达式

return的作用是终止函数的执行,当执行了return后,后面的语句不会执行
如果米有return语句,则默认返回None
return还可以返回给调用者数字
return可以返回一个值,如果要返回多个值,那么返回的类型是一个元组

def demo2():
return 1
def demo3():
return 1,2,3

print(demo2())
print(demo3()) #(1,2,3)
'''

# 5.函数文档字符串
'''
函数⽂档字符串是在函数开头,⽤来解释其接⼝的字符串。简⽽⾔之:帮助⽂档
包括了函数的基本信息、函数的功能介绍、每个形参的类型,使用信息等

文档字符串书写规则:
必须在函数内首行
使用三引号注释多行字符串

def test():
"""
函数名:test
功能:测试
参数:⽆
返回值:⽆
"""
print("函数输出成功") #使⽤__doc__属性查看⽂档字符串

print(test.__doc__)

'''

# 6.参数传递(**)
'''
python的参数传递是简单的值传递,这⾥的值是指变量的引⽤(地址),不
是变量的值。不存在值传递和引⽤传递的区分。简⽽⾔之,python的参数传递可
以称之为对象引⽤传递,对象可以分为:

不可变对象:int、float、None、bool、tuple、str
在函数内部不可能修改函数外部的变量
可变对象: dict、list
可以在函数内部修改
'''

# 7.空函数
'''
pass语句实现,函数体不完成任何功能,只有一个pass语句
def test():
pass

'''
# 8.函数类型
'''
函数也是⼀种类型,我们⾃定义的函数就是函数对象,函数名保存了函数对象的引⽤(地址)

def test():
print('测试函数')
print(test) ==>函数名是变量,指向了函数对象
pf = test ==>pf变量也指向了函数对象,所以也可以通过pf调⽤test函数
pf()
'''

# 9.匿名函数
'''
不再使⽤def 函数名()这种形式定义函数,⽽是使⽤lambda来创建匿名函数
lambda函数特点:
lambda只是⼀个表达式,函数体⽐def定义的函数简单的多
lambda的函数体不再是代码块,⽽是⼀个表达式
lambda只有⼀⾏,运⾏效率很⾼

语法:lambda [arg1,arg2、、、]
num_sum = lambda a,b:a + b
print(num_sum(1,2))
'''

# 10.传入函数
'''
⼀个函数就可以接收另⼀个函数作为参数,这种函数就称之为⾼阶函数,也可以称
之为传⼊函数。可以实现通⽤编程,排序等复杂功能

def add(a,b):
return a + b
def compute(a,b,func):
return func(a,b)
#调⽤
compute(3,5,add) ==> 8
'''
# 11.递归函数
'''
⼀个函数直接或间接的调⽤⾃⼰则称为递归调⽤

def fac(n):
if n ==0: #递归终⽌条件,如果n为0,则结束递归调⽤,返回
return 1
else:
tmp = fac(n-1) ==>调⽤⾃⼰,最后返回1,然后回调
return n * tmp ==>返回的是 1 * 2 * 3 * 4 * 5

print(factorial(5)) ==>120

传入过程:
tmp = func(5-1)
tmp = func(4-1)
tmp = func(3-1)
tmp = func(2-1)
tmp = func(1-1) ==>if判断结束,返回1

逆向递归返回
tmp = 1 ==>最后一次函数调用结束,返回1
return 1*2

tmp = 2
return 2*3

tmp = 6
return 6*4

tmp = 24
return 24*5 ==>fac函数结束

'''

# 12.递归适用条件
'''
如果⼀个问题规模缩减后,求解⽅式和原来⼀样,⼩规模问题解决后导致问题的最
终解决,则可适⽤递归
形式是递归的 阶乘和斐波那契数列
结构是递归的 列表遍历
解法是递归的 汉诺塔

递归的写法:
⼀个递归程序必须包含两部分:
递归终⽌条件
递归调⽤⾃⼰

def recurve(*args,**kw):
if 递归终⽌条件: #递归终⽌条件必须在递归调⽤前
pass
else:
recurve(参数)
pass
'''

标签:10,return,函数,递归,print,实参,def
来源: https://www.cnblogs.com/cll9/p/16089936.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有