• python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)


    一、函数的初始

    比如python没有len()方法,如果求字符串的长度

    使用for循环

    s = 'asdfadsf'
    count = 0
    for i in s:
        count += 1
    print(count)

    列表呢?

    li = [1,2,3,'a','b','c','ask']
    count = 0
    for i in li:
        count += 1
    print(count)  

    如果是字典呢?再把上面的代码贴一遍?可以看出2点:

    1.重复代码多

    2.可读性差

    写代码,一切以精简为主,避免重复代码。

    针对这种情况,出现了函数

    函数是组织好的,可重复使用的,用来实现单一,或i相关联功能的代码段。

    函数的产生:

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

    def my_len():
        #def 关键字,定义一个函数
        # my_len 函数名的书写规则与变量一样。
        # def 与函数名中间一个空格
        # 函数名():加上冒号(将函数名与函数体隔开),括号是用来传参的。
        # 函数体 就是函数里面的逻辑代码
        count = 0
        for j in li:
            count += 1
        print(count)  

    以上就是一个函数

    代码是从上至下执行的,执行到def my_len()时,将my_len这个变量名加载到临时内存中,它不执行。函数如何执行呢?

    函数的执行:函数名+()

    # 执行函数
    my_len()  

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

    二、函数返回值

    写函数,不要在函数中写print()。函数是以功能为导向的,除非测试的时候,才可以写print()。

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

    def func():
        print(111)
        return 
        print(444)
    func()
    

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

    def func():
        a = 134
        return a
    print(func())
    

      1.无return

    def func():
        pass
    print(func())
    

      2.return None(没有意义)

    def func():
        return None
    print(func())
    

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

    def func():
        return [1,2,3]
    print(func())
    

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

    def func():
        return 1,2,[33,44],'abc'
    print(func()) 
    li = [1,2,3,'a','b','c','ask']
    def my_len():
        count = 0
        for j in li:
            count += 1
        return count
    print(my_len())

    查看len方法的编码

    def len(*args,**kwargs):
        pass  

    pass表示使用C写的。发现my_len()和len()方法,有些类似了。能返回变量的长度了,但是和len()有些区别。len可以传参数,比如len('123')

    三、函数的传参

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

    实参角度:

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

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

    如果少一个参数呢?

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

    执行报错

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

    必须是一一对应的。

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

    def max_min(a,b):
        return a if a > b else b
    
    print(max_min(b = 1, a = 3))
    

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

    def func(a,b,c,d,e):
        print(a)
        print(b)
        print(c)
        print(d)
        print(e)
    func(1,2,c=3,4,5)

    执行报错:

    SyntaxError: positional argument follows keyword argument

    正确的写法:

    def func(a,b,c,d,e):
        print(a)
        print(b)
        print(c)
        print(d)
        print(e)
    func(1,4,d=2,c=3,e=5)  

    按照形参角度。

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

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

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

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

    举一个场景

    班主任录入员工信息表

    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个问题。第一,男生居多。第二,完成函数功能。修改 一下如下:

    def Infor_entry(username,sex='男'):
        with open('register_msg.txt',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,'女')
    

     四、三元运算

    三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值

    格式:     [on_true] if [expression] else [on_false]
    

     res = 值1 if条件 else 值2

    三元运算只适用于简单的if else判断,再多一层if判断就不适用了。

    举例说明:

    a = 1
    b = 2
    c = a if a > b else b   #如果a大于1的话,c=a,否则c=b
    

     写一个函数,功能比大小,大者返回

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

     上面的max_min函数,可以使用三元运算进行简写

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

     今日作业:

    练习题

    1、整理函数相关知识点,写博客
    2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
    4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
    6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
    7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
        dic = {"k1""v1v1""k2": [11,22,33,44]}
        PS:字典中的value只能是字符串或列表
    8、写函数,接收两个数字参数,返回比较大的那个数字。
    9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
    10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
    明日默写。
    ①,return的作用。
    ②,传参的几种方法,每个都简单写一个代码。
    如,实参,按位置传参。
    def func(x,y):
    Pass
    func('a','b')

     答案: 

     第二题:

    def func1(argv):return argv[1::2]
    print(func1([1,2,3,4]))
    

     第三题:

    def func1(argv):return len(argv) > 5
    print(func1([1,2,3,4,5,6,7,8]))
    

     第四题:

    def func1(args): return args[:2] if len(args) > 2 else args
    print(func1([1,2,3,4,5]))
    

     第五题:

    def func(argv):
        dic = {'digit':0,'aplha':0,'space':0,'other':0}
        for i in argv:
            if i.isdigit():
                dic['digit'] += 1
            elif i.isalpha():
                dic['aplha'] += 1
            elif i.isspace():
                dic['space'] += 1
            else:
                dic['other'] += 1
        return '数字{},字母{},空格{},其它'.format(dic['digit'],dic['aplha'],dic['space'],dic['other'])
    
    print(func('4566asf    &*(^&adf654664  flk'))
    

     第六题:

    def contain_space(data):
        for i in data:
            if i == ' ':
                flag = True
                break
            else:
                flag = False
    
        return '对象含有空格' if flag else '对象没有空格'
    
    data = 'asfj  asdfk'
    print(contain_space(data))
    

     第7题:

    def func(argv):
        for i in argv:
            argv[i] = argv[i][:2]
        return argv
    
    dic = {'k1':'v1v1','k2':[11,22,33,44]}
    print(func(dic))
    

     第8题:

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

     第9题:

  • 相关阅读:
    eclipse中的项目无法在build/classes目录下生成.class字节码
    nginx的权限问题(Permission denied)解决办法
    application/x-www-form-urlencoded、application/json、multipart/form-data、text/xml简单总结
    jackson的使用和详解
    博客园自定义样式
    java基础
    k8s
    系统服务构建运维
    私有云技术
    工程文档编写
  • 原文地址:https://www.cnblogs.com/Black-rainbow/p/8717136.html
Copyright © 2020-2023  润新知