zoukankan      html  css  js  c++  java
  • 初识函数

    初识函数

    • 1. 什么是函数
    • 2. 函数定义, 函数名, 函数体以及函数的调用
    • 3. 函数的返回值
    • 4. 函数的参数

    1.函数

         定义一个事情或者功能. 等到需要的时候直接去用就好了. 那么这里定义的东西就是⼀个函数.           函数: 对代码块和功能的封装和定义

     2.函数的定义, 函数名, 函数体以及函数的调用

          使用def关键字来定义函数, 函数的定义语法:

    def 函数名():    
        函数体

        函数名的命名规则和使用和变量基本⼀样(变量的命名规则),     函数体: 就是函数被执行之后要执行的代码

    def back():
        print("网上订票")
        print("坐火车回家")
        print("路上睡觉")

        定义完了. 但是这个时候去执行. 会发现什么都没有发生.  因为我只定义了⼀个函数. 但是还没有执行过这个函数.

        函数的调用: 使用函数名可以调用函数, 写法: 函数名(), 这个时候函数的函数体会被执行

    def back():
        print("网上订票")
        print("坐火车回家")
        print("路上睡觉")
    back()                  #调用函数)

      3.函数返回

          执行完函数之后. 使用return来返回结果. 

         函数中return的使用:

         函数中遇到return, 此函数结束, 不再继续执行.

    def back():
        print("网上订票")
        print("坐火车回家")
        returnprint("路上睡觉")            #不会被执行
    back()

         给函数的调用者⼀个访问结果

    def back():
        print("网上订票")
        print("坐火车回家")
        print("路上睡觉")
        return "就是太慢了"
    think=back()
    print(think)

        函数返回值可以有多个结果

    def back():
        print("网上订票")
        print("坐火车回家")
        print("路上睡觉")
        return "就是太慢了","有时候票也不好买","但是相对便宜"
    think=back()
    print(think)      #('就是太慢了', '有时候票也不好买', '但是相对便宜')   tuple

    总结⼀下:

    • 1. 遇到return. 此函数结束, 函数后面的东西将不会再执行
    • 2. return 返回值       

            关于返回值:           

    • 如果return什么都不写 或者干脆不写return .那么返回的就是None           
    • 如果return后面写了⼀个值. 则调用者可以接收⼀个结果           
    • 如果return后面写了多个结果, 则调用者可以接收⼀个tuple, 调用者可以直接解构成多个变量

    4.函数的参数

        参数, 函数在调用的时候指定具体的⼀个变量的值. 就是参数.  语法:

    def 函数名(参数列列表):   
         函数
    def back(ways):
        print("网上订票")
        print("坐%s回家" % ways)
        print("路上睡觉")
    back("汽车")
    back("火车")
    back("飞机")

       关于参数: 

    •   形参:写在函数声明的位置的变量叫形参.  形式上的⼀个完整. 表示这个函数需要xxx
    •   实参:在函数调⽤用的时候给函数传递的值. 叫实参, 实际执行的时候给函数传递的信息. 表⽰示给函数 xxx
    •   传参:给函数传递信息的时候将实际参数交给形式参数的过程被称为传参.

      (1)参数的分类--实参的分类

         位置参数:在访问back()的时候, 按照位置的顺序分别把"携程", "火车", 6小时 赋值给 search, ways, time. 在传参过程中. 系统会默认按照位置把实参赋值到形参.   

    def back(search,ways,time):
        print("打开%s进行查找"%search)
        print("坐%s回家" % ways)
        print("路上需要睡%s" %time)
    back("携程","火车","6小时")

    打开携程进行查找
    坐火车回家
    路上需要睡6小时

     练习: 编写函数, 给函数传递两个参数a, b. 比较a, b的大小, 返回 a, b中大的那个数  

    def my_max(a, b):   
         if a > b:     
              return a    
        else:       
              return b
     # 有点⼉儿麻烦, 我们在这⾥里里学一个三元运算符. 
    def my_max(a, b):    
         c = a if a > b else b   # 当a>b成⽴立返回a, 否则返回b   
         return c            

    关键字参数:函数在定义的时候参数非常多时,我们不需要记住每个参数的位置. 只要记住每个参数的名字就可以了了 

    def back(search,ways,time):
        print("打开%s进行查找"%search)
        print("坐%s回家" % ways)
        print("路上需要睡%s" %time)
    back(ways="火车",search="携程",time="6小时")
    打开携程进行查找
    坐火车回家
    路上需要睡6小时

     混合参数: 可以把上面两种参数混合着使用. 也就是说在调用函数的时候即可以给出位置参数, 也可以指定关键字参数

    def back(search,ways,time):
        print("打开%s进行查找"%search)
        print("坐%s回家" % ways)
        print("路上需要睡%s" %time)
    back("携程",ways="火车",time="6小时") #正确 第一个位置赋值给search,后面的参数开始制定关键字
    def back(search,ways,time):
        print("打开%s进行查找"%search)
        print("坐%s回家" % ways)
        print("路上需要睡%s" %time)
    back(search="携程","6小时",ways="火车")   # 错误, 最开始使用了关键字参数, 那么后面的"6小时"的位置就串了,容易出现混乱

    注意: 在使用混合参数的时候, 关键字参数必须在位置参数后面

    (2)参数的分类--形参的分类

         位置参数:按照位置来赋值, 到⽬目前为⽌止, 我们编写的函数都是这种

         默认值参数:在函数声明的时候, 就可以给出函数参数的默认值. 在调用的时候可以 给出具体的值, 也可以不给值, 使用默认值.

          比如, 我们录入咱们班学生的基本信息. 通过调查发现. 我们班大部分学生都是男生. 这个时候就可以给出⼀个sex='男'的默认值.

    def stu_info(name, age, sex=''):
        print("录⼊入学⽣生信息")
        print(name, age, sex)
        print("录⼊入完毕")
    stu_info("张强强", 18)

    注意, 必须先声明位置参数, 才能声明默认值参数.

    Homework

     1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者

    def func(lst):   # function
        return lst[1::2]
        # result = []
        # for i in range(len(lst)):
        #     if i % 2 == 1:
        #         result.append(lst[i])
        # return result                        #很明显代码量大
    ret=func([1,2,5,8,7])
    print(ret)

    2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

    def func(obj):
        # if len(obj) > 5:
        #     return True
        # else:
        #     return False
        return len(obj) > 5                      #返回结果
    print(func("倚天屠龙记张无忌"))

    3.写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者

    def func(lst):
        if len(lst) > 2:
            return lst[:2]

    4.写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。

    def count(info):
        a=0
        b=0
        c=0
        d=0
        for el in info:
            if el.isdigit():
                a+=1
            elif el.isalpha():
                b+=1
            elif el.isspace():
                c+=1
            else:
                d+=1
        return a,b,c,d
    ret = count ("ASD78489   __")
    print(ret)

    5.写函数,接收两个数字参数,返回比较大的那个数字。

    def func(a, b):
        # if a > b:
        #     return a
        # else:
        #     return b
        return a if a > b else b          #三目运算

    7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

           dic = {"k1": "v1v1", "k2": [11,22,33,44]}

           PS:字典中的value只能是字符串或列表

    def func(dic):
        for k, v in dic.items():
            if len(v) > 2:
                v = v[:2]
                dic[k] = v
        return dic
    print(func({"k1": "v1v1", "k2": [11,22,33,44]}))

    8.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。

    def stu_info(name,age,education,sex):
        f=open("student_msg",mode="a",encoding="utf-8")
        f.write("%s %s %s %s
    " % (name,age,education,sex))
    a = input("请输入学生姓名:")
    b = input("请输入学生年龄:")
    c = input("请输入学生学历:")
    d = input("请输入学生性别:")
    stu_info(a,b,c,d )

    9.对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。

    def stu_info(name,age,education,sex=""):
        f=open("student_msg",mode="a",encoding="utf-8")
        f.write("%s %s %s %s
    " % (name,age,education,sex))
        f.flush()
        f.close()
    while 1:
        name = input("请输入学生姓名(输入Q退出):")
        if name.upper()=="Q":
            break
        else:
            age = input("请输入学生年龄:")
            education = input("请输入学生学历:")
            sex = input("请输入学生性别(如果是女生则输入女,男生不需要输入,任意键跳过输入):")
            if sex == "":
                stu_info(name,age,education,sex)
            else:
                stu_info(name, age, education)
    def func(name, age, edu, gender=""):
        f = open("student_msg", mode="a", encoding="utf-8")
        f.write(name+"_"+gender+"_"+age+"_"+edu+"
    ")
        f.flush()
        f.close()
    while 1:
        tiwen = input("请问是否要输入学生信息输入任意内容继续,输入Q退出:")
        if tiwen.upper() == 'Q':
            break
        name = input("请输入你的姓名:")
        gender = input("请输入你的性别:")
        age = input("请输入你的年龄:")
        edu = input("请输入你的学历:")
        gender = "" if gender == "" else ""
        func(name, age, edu, gender)

    8,写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作。

    def revise(name,old,new):
        import os
        with open ("%s" % name,mode="r",encoding="utf-8" )as f1,
            open ("%s_副本"% name,mode ="w",encoding="utf-8" ) as f2:
            for line in f1:
                New_line = line.replace("%s" % old,"%s" %new)
                f2.write(New_line)
        os.remove("%s"% name)
        os.rename("%s_副本" % name, "%s"% name)
    a =input("请输入您要修改的文件名:")
    b = input("请输入你要修改的内容:")
    c = input("请输入你修改的新内容:")
    revise(name=a,old=b,new=c)
    import os
    def func(file_name, old, new):
    
        with open(file_name, mode="r", encoding="utf-8") as f1, 
            open(file_name+"_副本", mode="w", encoding="utf-8") as f2:
            for line in f1:
                line = line.replace(old, new)
                f2.write(line)
        os.remove(file_name)
        os.rename(file_name+"_副本", file_name)

    12.写一个函数完成三次登陆功能,再写一个函数完成注册功能

    def regist(username, password): # wusir
        # 1. 检查用户名是否重复
        f = open("user_info", mode="r+", encoding="utf-8")
        for line in f:
            if line == "": # 防止空行影响程序运行
                continue
            user_info_username = line.split("_")[0]
            if username == user_info_username: # 用户名重复了
                return False
        else:
            # 2. 写入到文件中
            f.write(username+"_"+password+"
    ")
    
        f.flush()
        f.close()
        return True
    
    name, psw = input("请输入你的用户名:"), input("请输入你的密码:")
    print(regist(name, psw))
    
    def login(username, password):
        f = open("user_info", mode="r", encoding="UTF-8")
        for line in f:
            if line.strip() == username+"_"+password:
                f.close()
                return True
        else:
            f.close()
            return False
    
    for i in range(2, -1, -1):
        ret = login(input("请输入用户名:"), input("请输入密码:"))
        if ret:
            print("恭喜你. 登录成功")
            break
        else:
            print("用户名或密码错误, 还有%s次机会" % i)
  • 相关阅读:
    关于如何实现NSNotificationCenter在不同的VC对象之间发送通知
    关于iOS如何实现一个单例
    C++中级-类模板
    C++中级-文件读写
    C++中级-多态
    C++中级-继承
    C++中级-friend关键字访问类中private
    C++中级-(静态成员和对象丶this指针丶常函数和对象、成员函数和对象)
    C++中级-(构造函数,拷贝构造函数,析构函数)
    C++中级-类的封装
  • 原文地址:https://www.cnblogs.com/wcx666/p/9640132.html
Copyright © 2011-2022 走看看