Java教程

10_函数

本文主要是介绍10_函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 函数
'''
函数就是完成特定功能的代码块,是对代码的封装。
函数的特点:
        代码可复用
        代码可维护性搞
        容易排错
        可读性好
        利于团队开发

函数语法:
        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_函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!