• 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('{}	{}
    '.format(username,sex))
    

    执行输出:

    查看文件内容

    完成以下2个需求

    1.男女一样多

    2.完成函数功能

    修改如下

    def Infor_entry(username,sex='男'):
        with open('name_list',encoding='utf-8',mode='a') as f1:
            f1.write('{}	{}
    '.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
    

    练习题:待续

    作者:蛛丝马迹
        
    no copyright, 欢迎转载
  • 相关阅读:
    day7随笔
    day6随笔
    day5笔记
    uniapp 全屏蒙版下的其他view禁止滑动
    uniapp scroll-view 组件右侧的滚动条
    uni 组件 头部
    根据两点的经纬度查询两点间的距离
    仅供学习使用的一些 相关vue类
    仅供学习使用的一些样式+行为
    百度地图简单调用
  • 原文地址:https://www.cnblogs.com/python-wang/p/9511568.html
Copyright © 2020-2023  润新知