zoukankan      html  css  js  c++  java
  • python(函数封装)

    一:Python 自定义函数

    函数示意图如下:

    1、使用函数的好处

    • 代码重用
    • 保持一致性,易维护
    • 可扩展性

    2、函数定义

    • 函数定义的简单规则
      • 函数代码块以def关键词开头
      • 后接函数标识符名称和圆括号(),名称不能用纯数字或值python保留字符定义
      • 任何传入参数和自变量必须放在圆括号中间函数内容以冒号起始,并且缩进若有返回值
      • 函数通常使用三个单引号 '''...'''   来注释说明函数;函数体内容不可为空,可用 pass 来表示空语句
      • 语法如下
    • 函数名称定义的要求
      • 不要以纯数字命名
      • 不要以python中保留字符(关键字)来命名
      • 不要以文件名命名
      • 不能出现特殊字符
      • 要简短且见名知义
    def 函数名():
        函数体

    3、return 返回语句

    • 每个函数都有一个 return 返回值,如果没定义则返回 None
    • 函数中只要执行到 return 语句,函数就自动结束
    • 可以写多个 return 语句但是第二个及之后的 return 语句不会被执行
    • 可以通过 return x,y,z 形式返回多个值
    def num(a,b):
        c = int(a) + int(b)
        return a,b,c

    4、参数:

    • 形参:写在函数声明的位置的变量量叫形参
    • 实参:在函数调⽤的时候给函数传递的值. 叫实参
      • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值.
    • 传参:给函数传递信息的时候将实际参数交给形式参数的过程被称为传参

    5、参数的分类

    •  位置参数
    def print_info(name,school):    # 定义形参
        print("My name is %s" % name)
        print("I learning software testing in %s" % school)
        
    print_info("XiaoWang","ShenZhen Dcs")    # 传入实参
    
    # 结果如下
    My name is XiaoWang
    I learning software testing in ShenZhen Dcs
    def add(a,b):   #括号内为形参
        return a+b
    print (add(2,3))  #括号内为实参
    
    def jian(a,b):
        return a-b
    
    def cheng(a,b):
        return a*b
    
    def chu(a,b):
        return a/b
    
    #求出给定区间的偶数和
    def sums(x,y):
        a = []
        for i in range(x,y+1):
            if i % 2 == 0:
                a.append(i)
        return(sum(a))
      •  示例如下
    #统计出字符串中某个字母有多少个
    def counts(s,x):
        print (s.count(x))
    
    #分数评级方法,90分以上:A,70分以上:B,60分以上:C,其他:D
    def PG(score):
        if score > 90:
            return("A")
        elif score > 70:
            return("B")
        elif score > 60:
            return("C")
        else:
            return("D")
    #封装一个功能,实现统计文件内容行数
    def count_line(filepath):
        with open(filepath,"r") as data:
            return(len(data.readlines()))
    #coding=utf-8
    """
    封装登录和注册方法进行登录注册要求如下:
    先定义一个字典来存放用户名,账号和密码如dic = {'admin': '123456', 'xfs': '234567'}
    要求如下:
    1、从字典中获取用户完成登入,登入时判断用户是否存在,存在直接登入
    2、如果输入的登入用户判断不存在字典,则调用注册方法,完成该用户的注册,注册成功后写入字典
    """
    dic = {'admin':'123456','xfs':'234567'}
    
    def register():
        user = input("输入账号:")
        A = True
        while A:
            pwd = input("输入密码:")
            repwd = input("请确认密码:")
            if repwd == pwd:
                dic.setdefault(user,pwd)
                A = False
            else:
                print ("两次密码不一致!")
    
    def login():
        user = input("请输入账号:")
        if user in dic.keys():
            for i in range(3):
                pwd = input("请输入密码:")
                if pwd == dic.get(user):
                    print ("登录成功")
                    break
                else:
                    print ("密码错误")
        else:
            print ("账号不存在,请注册!")
            register()
    
    login()
    #coding=utf-8
    
    #封装一个方法,实现人民币和美元汇率转换
    
    def Change(a):
        if a[:3] == "":
            return("%.4f" % (float(a[3:])/6.78))
        elif a[:1] == "$":
            return ("%.4f" % (float(a[1:])*6.78))
        else:
            return "输入有误!"
    • 默认参数
      • 默认形参必须接在位置参数后
    def print_info(name = "XiaoZhen",school = "ShangHai Dcs"):
        print("My name is %s" % name)
        print("I learning software testing in %s" % school)
    
    print_info()    # 未传实参
    print_info("XiaoWang","ShenZhen Dcs")    # 重新传了实参
    
    # 结果如下
    My name is XiaoZhen
    I learning software testing in ShangHai Dcs
    My name is XiaoWang
    I learning software testing in ShenZhen Dcs
    def print_info(name,school = "GuangZhou Dcs"):
        print("My name is %s" % name)
        print("I learning software testing in %s" % school)
    
    print_info("XiaoWang","ShenZhen Dcs")
    
    #结果如下
    My name is XiaoWang
    I learning software testing in ShenZhen Dcs

    # 默认参数在位置参数前
    def print_info(name = "XiaoZheng",school): # 此时默认参数在位置参数前,代码会提示报错 
    print("My name is %s" % name)
    print("I learning software testing in %s" % school)
    • 可变长参数
      • 建议可变长参数放在默认参数后
    def abc(x,*y):
        return x,y
    abc(1,2)
    abc(1,2,3,4,5,6)
    def abc(*args):
        for i in args:
            print(i)
        print(args)     #args 中存储了(1, 2, 3, 4, 5)
        print(*args)    #输出的时候加上 * 可以去除()
    
    abc(1,2,3,4,5)
    
    #结果如下
    1
    2
    3
    4
    5
    (1, 2, 3, 4, 5)
    1 2 3 4 5
    # 将可变长参数放在默认参数前
    
    def print_info(name,*args,age = 24,**kwargs):
        print("My name is %s" % name)
        print("My teachers are %s" % (str(args)))
        print("My age is %s" % age)
        print("I learning software testing in %s" % (kwargs.get("School")))
    
    print_info("XiaoZheng","Qian Sir","Chen Sir","Zheng Sir",27,School="ShenZhen Dcs")
    
    # 结果如下
    My name is XiaoZheng
    My teachers are ('Qian Sir', 'Chen Sir', 'Zheng Sir', 27)    # 解释器将我传给 age 的实参 27 也当作 args 的参数了
    My age is 24    # 我在调用函数时传给 age 的实参未生效
    I learning software testing in ShenZhen Dcs
    • 关键字参数
      • 关键字参数必须放在可变长参数后
    def print_info(name,school):
        print("My name is %s" % name)
        print("I learning software testing in %s" % school)
    
    print_info(school="ShangHai Dcs",name="XiaoZheng")    # 第一种传参方式
    
    print_info(**{"name":"XiaoWang","school":"ShenZhen Dcs"})    # 第二种传参方式
    
    info = {"name":"XiaoQian","school":"GuangZhou Dcs"}
    print_info(**info)    # 第三种传参方式
    
    # 结果如下
    My name is XiaoZheng
    I learning software testing in ShangHai Dcs
    My name is XiaoWang
    I learning software testing in ShenZhen Dcs
    My name is XiaoQian
    I learning software testing in GuangZhou Dcs
    def abc(x,**kwargs):
        return x,kwargs
    
    #传参方式如下
    stu = {"name":"zhangsan","age":20}
    print (abc(1,**stu))
    
    print (abc(1,name="zhangsan",age=20))
    
    print (abc(1,**{"name":"zhangsan","age":20}))
    # 关键字参数放在可变长参数后
    
    def print_info(name,age = 24,*args,**kwargs):
        print("My name is %s" % name)    # 位置参数
        print("My age is %s" % age)    # 默认参数
        print("My teachers are %s" % (str(args)))    # 可变长参数
        print("I learning software testing in %s" % (kwargs.get("School")))    # 关键字参数
    
    print_info("XiaoZheng",27,"Qian Sir","Chen Sir","Zheng Sir",School="ShenZhen Dcs")
    
    # 结果如下
    My name is XiaoZheng
    My age is 27
    My teachers are ('Qian Sir', 'Chen Sir', 'Zheng Sir')
    I learning software testing in ShenZhen Dcs
    
    # 关键字参数放在可变长参数前
    def print_info(name,age = 24,**kwargs,*args):    # 代码会提示报错
        print("My name is %s" % name)
        print("My age is %s" % age)
        print("My teachers are %s" % (str(args)))
        print("I learning software testing in %s" % (kwargs.get("School")))

    6、作用域(局部变量和全局变量)

    • 局部变量是在函数内部定义的变量,只能在函数内部使用,函数执行结束后,函数内部的局部变量,会被系统回收不同的函数,不同函数可以定义相同的名字的局部变量,但是各用各的不会产生影响
    • 全局变量是在函数外部定义的变量,(没有定义在某一个函数内),所有函数内部都可以使用这个变量
  • 相关阅读:
    innerHTML使用方法
    HDU 1426 Sudoku Killer
    Junit使用教程(一)
    HLS协议实现
    GPIO
    TraceView总结
    在kettle中实现数据验证和检查
    用户向导左右滑动页面实现之ImageSwitcher
    DWZ使用笔记
    oracle进程
  • 原文地址:https://www.cnblogs.com/ZhengYing0813/p/11754411.html
Copyright © 2011-2022 走看看