世外桃源

非淡泊无以明志————非宁静无以致远——

python 函数初识

*—*—python函数初识—*—*
一、函数的初识
若我们不使用len方法,该如何实现求字符串的长度?
答:使用for循环
s = 'tiancai'
count = 0
for i in s:
    count += 1    
print(count)
执行输出:
7

list列表
lis = ['aa','bb',11,22,'abc','天才']
count = 0
for i in lis:
    count += 1
print(count)
执行输出:
6

 

 

以上写法有2点不好的地方:

1.重复的代码

2.代码的可读性差

 

写代码应当避免重复代码,以简化代码为荣。

对于这种情况,出现了函数这么个东东

函数是封装好的,拿来就可以使用,用来实现单一或相关联功能的代码段。

函数:函数就是内部封装了一个功能的代码片段。

 

def func():
    #def 函数名(): 定义一个函数
    #函数名的书写规则跟变量一样
    #def与函数名直接有一个空格
    #def 函数名():冒号用来将函数名与函数体隔开,不能少,括号用来传参
    #函数体是函数里面的逻辑代码
    print(666)
    print(999)

 

代码是由上往下依次执行的,执行到def func()时

将func这个函数名加载到临时内存中,不执行。

那么函数如何执行呢?

函数的执行方法:函数名()

#执行函数
func()

 当见到func(),只有见到()时,程序才会根据函数名从内存中找到函数体,然后执行它。没有括号是不会执行的。

 

 二、函数的返回值 return

    写函数,不要在函数内写print()

    函数是以功能为导向,一般只有在测试中才可以写print()

 return返回的值需要print才能打印显示出来

 

    1.在函数当中,遇到return立即结束函数 。

def func():
    print(666)
    return
    print(999)
func()

执行输出:

666

 

2.将返回值返回给函数调用者。

def func():
    s = '天才'
    return s
print(func())

执行输出:

天才

 

return的几种情况

  1.无return  返回None

def func():
    print(123)
print(func())

执行输出:

None

 

  2.有return 返回None  

def func():
    return None  #没有意义
print(func())

执行输出:

None

 

  3.return 单个值 该值是什么,就直接返回给函数的调用者——函数名() 

def func():
    return 1  #return单个值
print(func())    

def fun():
    return [1,2,3]  #return单个值[1,2,3]
print(fun())

执行输出:

1

[1,2,3]

 

  4.return 多个值 将多个值放到一个元组里,返回给函数的调用者。

 

def func():
    return 1,'a',[11,12]
print(func())

 

执行输出:

(1, 'a', [11, 12])

 

lis = [1,2,3,'aaa','天才']
def func_len():
    count = 0
    for i in lis:
        count +=1
    return count
print(func_len())

执行输出:

5

 

my_len()和len()方法,看起来好像有些类似,都能返回变量的长度,但是和len()有区别。len可以传参数,比如len('abc')

 

三、函数的传参

def my_len(l): # l 形式参数,形参
    print(l) #实际对应就是s
    count = 0
    for i in l:
        count += 1
    return count
 
s = 'tiancai'
print(my_len(s)) #括号里面的是实际参数,实参

执行输出:

tiancai

7

 

实参角度:

  1.位置传参。按顺序,一一对应。

def func(a,b,c):
    print(a)
    print(b)
    print(c)
func('tiancai',3,4)

执行输出:

tiancai

3

4

 

那么,少传一个参数会怎么样呢?

def func(a,b,c):
    print(a)
    print(b)
    print(c)
func(1,2)

TypeError: func() missing 1 required positional argument: 'c'

必须一一对应,否则报错

 

  2.关键字传参,不按顺序,一一对应。

def func(a,b):
    print(a)
    print(b)
    print(a,b)
func(b =2, a =1)

执行输出:

1
2
1 2

 

  3.混合传参,关键字参数在最后面

def func1(a,b,c,d):
    print(a)
    print(b)
    print(c)
    print(d)
func1(1,2,c=3,4)

执行输出:

SyntaxError: positional argument follows keyword argument

 

正确使用姿势

def func1(a,b,c,d):
    print(a)
    print(b)
    print(c)
    print(d)
func1(1,2,c =3, d =4)

执行输出:

1
2
3
4

 

形参角度:

  1.位置传参。按照顺序一一对应。

def func(a,b,c):
    print(a)
    print(b)
    print(c)
func('天才',3,4)

执行输出:

天才
3
4

 

  2.默认参数。传参则覆盖,不传则默认,默认参数永远在位置参数后面

def func(a,b=123):
    print(a,b)
func(1,2)

执行输出:

1 2

 

def func(a,b=123):
    print(a,b)
func(1)

执行输出:1 123

 

场景应用:

员工信息表录入

while True:
    username = input('请输入姓名: ').strip()
    sex = input('请输入性别: ').strip()
    with open('name_list',encoding='utf-8',mode='a') as f1:
        f1.write('{}\t{}\n'.format(username,sex))

执行输出:

 

查看文件内容

 

完成以下2个需求

1.男女一样多

2.完成函数功能

 

修改如下

def Infor_entry(username,sex='男'):
    with open('name_list',encoding='utf-8',mode='a') as f1:
        f1.write('{}\t{}\n'.format(username,sex))
 
while True:
    username = input('请输入姓名(男生以1开头):').strip()
    if '1' in username:
        #去除1
        username = username[1:]
        Infor_entry(username)
    else:
        Infor_entry(username,'女')

执行输出:

查看文件:

 

四、三元运算

三元运算就是可以在给一个变量赋值的时候,可以直接加判断再赋值

s = 值1 if 条件 else 值2


例如:

 

a =100
b = 99
c= a if a>50 else b #如果a大于50的话,c=a,否则c=b
print(c)

 

执行输出:

100

 

写一个拥有比大小功能的函数,返回数值较大的数

def max_min(a,b):
    if int(a) > int(b):
        return a
    else:
        return b
print(max_min(1,5))

执行输出:

5

 

上面那样写代码太low了,我们可以用优雅的三元运算进行优化,代码如下

def max_min(a,b):
    return a if a > b else b

 

练习题:待续

 

posted on 2018-08-21 15:24  蛛丝_马迹  阅读(305)  评论(0编辑  收藏  举报

导航