python学习之函数(一)

4.4函数

面向过程编程的缺点:

​ 1.代码重复;

​ 2.代码可描述性不高;

4.4.1 函数初识

​ 函数是对代码块动作和功能的封装定义:函数是以功能为导向,一个为函数封装一个功能。

​ 优点:函数减少了代码的重复性,增强了代码的可读性;

结构: def 函数名(形参列表) : 形参列表指的是可以有多个参数

​ 函数体

​ def: 定义函数 ,关键字

​ 函数名:命名与变量命名规范一致,重要的是一定要可描述性

():传参使用

调用: 函数名()

#字符串的倒数输出
def revers_num():
    s = input('请输入一串数字:')
    a = s[::-1]
    print(a)
revers_num()

4.4.2 函数的返回

执行函数完毕,可以使用return来返回结果。

def revers_num():#数字的倒数输出
    s = input('请输入一串数字:')
    a = s[::-1]
    print(a)
    return True
n = revers_num()
print(n)   #输出为True

return的使用:

  1. 函数中遇到return, 此函数结束, 不再继续执行;
  2. 给函数的执行者一个访问结果;
  3. 如果return后面什么都不写或者没有写return,那么返回就是None;
  4. return后面有单个值,执行者可以接受到这个值(不改变值的类型);
  5. return后跟着多个值,执行者可以得到一个元组,执行者也可以直接解构成多个变量,解构后一定保证变量与元素一一对应;
#返回一个值
def new_len(li):
    count = 0
    for j in li :
        count += 1
    return count
li = [1,2,3,4,5,6,7,8]
a = new_len(li)
print(a)   #输出  8

#返回多个值
def inf ():
    a = 1
    b = 2
    c = 3
    return a,b,c
a = inf()
print(a)  #输出一个元组(1, 2, 3)
a,b,c = inf()  #解构
print(a,b,c)  #输出   1 2 3

4.4.3函数的参数

语法:def 函数名(参数):

​ 函数体

#数字的倒数输出
def revers_num(NNNN):   #NNNN就是形参,
    s = str(NNNN)
    a = s[::-1]
    print(a)
    return True
revers_num(123)  #123就是实参
#输出321

形参:在函数声明的位置给出来的参数叫形参,用一个变量来表示,表示这个函数需要XXXX

实参:在函数调用的时候给参数的传递值叫实参,实际执行的时候给函数传递信息,表示函数需要XXXX

传参:为了函数的扩展性。在函数传递信息时,把实参传递给形参的过程就叫做传参

def new_len(a):
    count = 0
    for i in a :
        count += 1
    return count
li = [1,2,3,4,5]
s = '12345'
print(new_len(li)) 
print(new_len(s))

4.4.4 实参的分类

位置参数:从左至右按顺序一一对应;位置改变,函数运行的结果会改变,灵活性不够

def inf(name,age,sloggon):
    print('my name is ',name)
    print('my age is ',age)
    print('my sloggon is',sloggon)
inf('盖伦',23,'德玛西亚')  
#输出
my name is  盖伦
my age is  23
my sloggon is 德玛西亚
#如果将实参的位置改变,输出的结果就惨不忍睹

关键字参数:一一对应;不需要记住每个参数的位置,只要记住每个参数的名字就可以了

def inf(name,age,sloggon):
    print('my name is ',name)
    print('my age is ',age)
    print('my sloggon is',sloggon)
inf(age=23,sloggon='德玛西亚',name='盖伦')  #不管你的位置怎么变,只要标记了形参,那输出的结果就是一样的
#输出
my name is  盖伦
my age is  23
my sloggon is 德玛西亚

混合参数:位置参数必须放在关键字参数前面且要按照顺序一一对应;

当关键字参数放在位置参数前边时,运行会报错;位置参数设定完毕后,关键字参数不能跟位置参数传参冲突,不然会报“多个参数”错误

#正确示范:
def inf(name,age,sloggon):
    print('my name is ',name)
    print('my age is ',age)
    print('my sloggon is',sloggon)
inf('盖伦',23,sloggon='德玛西亚')
#错误示范
inf(name='盖伦',23,'德玛西亚')
inf(23,'德玛西亚',name='盖伦')

4.4.5 形参的分类

位置参数:与实参的位置参数相同,按顺序一一对应。

默认参数:放在位置参数之后;在函数声明的时候, 就可以给出函数参数的默认值,在调⽤的时候可以给出具体的值, 也可以不给值, 使用默认值。

def inf(name,age,team='战士'):
    print('name is :',name)
    print('age is:',age)
    print('team is:',team)
inf('皇子',25,)     #如果没有定义team,那就照着函数的默认来
inf('莫甘娜',age=1000,team='丛林法师')   #重新定义了team参数

总结:

​ 1.位置参数,按照位置给形参赋值

​ 2.默认参数,传参时如果重新定义了参数值,默认值不起作用;没有重新定义时,默认参数传参。目的是保证有一个参数一直在

​ 3.顺序:位置参数必须放在前面,默认参数必须放在后面

默认参数的坑

当默认参数是可变类型时,定义的变量不会随着函数的结束而消失

def func(a,l=[]):
    l.append(a)
    return l
print(func(1,))   #输出 [1]
print(func(2,))	  #输出 [1, 2]
print(func(3,))	  #输出 [1, 2, 3]
#你说神奇不神奇,l列表竟然在函数结束后保留下来了
posted @ 2019-06-17 21:18  Aries-X  阅读(144)  评论(0编辑  收藏  举报