zoukankan      html  css  js  c++  java
  • python学习笔记(四)-- 函数、参数类型、递归调用

    函数

    #定义一个函数,包括函数名,函数体,参数
    def calc(a,b):#形参
        return a+b #返回值,函数遇到return自动结束
    
    result = calc(1,3)#函数调用
    print(result)
    
    #实例----判断输入的是否是合法的小数
    #1、判断是否只有一个小数点
    #2、正小数,以小数点进行分隔,左边是一个整数,右边也是一个整数
    #3、负小数,右边是整数,左边以负号开头,只有一个负号,负号后面是小数
    def check_float(number):
        number = str(number)#转化成字符串
        if number.count('.') == 1:
            left,right = number.split('.')  #用两个变量接收两个元素
            # print(number)
            #判断正小数
            if number[0].isdigit() and number[1].isdigit():
                print("输入的价格正确")
                return True
            #判断负小数
            elif number[0].startswith('-')  and number[0][1:].isdigit() and number[1].isdigit():
                print("输入的价格正确")
                return True
        #除了正小数负小数,其余情况都会走到这里
        return False

    局部变量VS全局变量

    局部变量--定义在函数里面的变量,只能在函数里面使用,在函数外面不能使用
    全局变量--作用于整个程序
    
    
    数据类型:int str tuple #不可修改的变量需要通过global声明才能在函数里面修改全局变量
    数据类型:list dict set #可以修改的变量不需要global,直接可修改
    1 #在函数内修改全局变量,需要用global声明
    2 money = 500
    3 def func():
    4     global money#声明全局变量
    5     money += 100
    6     return money
    
    

    函数形参有四种类型:

    #1、必填参数(位置参数)
    #2、默认值参数
    #3、参数组
    #4、关键字参数
    位置参数
    1
    调用函数的时候,可以全部都用位置参数,位置是一一对应的,必须按照位置来传 2 def xxx(name,age,sex,addr,phone,qq,mail): 3 print(name,age,sex) 4 #位置参数 5 xxx('xiaomi',12,'m','cd',12346,3322323,'11@aa.com')
    关键字参数
    1
    调用函数时,可以位置参数与关键字参数一起使用,位置参数必须在前面 2 def xxx(name,age,sex,addr,phone,qq,mail): 3 print(name,age,sex) 4 #关键字参数 5 xxx('xiaomi',11,'f',addr='cd',phone=13113,mail='fewwef',qq=121212)
    默认参数
    1
    #默认值参数在定义形参时给它赋一个默认值,如果函数调用时没传参数,则用默认值,传了参数则用传入值 2 def op_file(file, content=None): 3 if content: 4 with open("a.txt",'w') as f: 5 f.write(content) 6 else: 7 with open('a.txt') as f: 8 res = f.read() 9 return res 10 op_file('a.txt','hello') 11 print("读文件",op_file('a.txt'))
    参数组
    1
    #参数前面加*,参数是一个元组 2 def send_mail(*names): 3 for name in names: 4 print("给%s发测试邮件!"%name) 5 send_mail() 6 send_mail('xiaomi') 7 send_mail('xiaomi','xiaohei','ewiiew')
    1 # 两个*号,关键字传参,参数存成一个字典
    2 def xiaomi(**info):
    3     print(info)
    4 xiaomi()
    5 xiaomi(name = '123',addr='233')
    #参数例子
    def xiaomi(name,age=None,*args,**kwargs):
        print(name)
        print(age)
        print(args)
        print(kwargs)
    #传入参数时,顺序是1、位置参数2、默认值参数3、可变参数4、关键字参数
    xiaomi('xiaobai',18,'cd','sh',money=500,func='xiaobai')

    传入参数为list或者dict

    def op_mysql(host,port,user,passwd,db):
        print(host)
        print(port)
        print(user)
        print(passwd)
        print(db)
    
    db_info = ['127.0.0.1','3306','root','123456','szz']
    db_info2 = {'host':'127.0',
                'port':'3306',
               'user':'root',
               'passwd':'123456',
               'db':'szz'}
    op_mysql(*db_info) #解包,把list元素分别传入函数,也可以是字符串等有下标的数据类型
    op_mysql(**db_info2)#把字典元素分别传入函数

    函数返回值

    return:返回函数结果;函数体内遇到return结束函数

    #函数有多个返回值时,返回的是一个元组
    def get_file(age,name,addr):
        age += 5
        name = 'szz_' + name
        addr = 'cd_' + addr
        return age,name,addr
    res = get_file(19,'xiaobai','ccc')
    print(res)
    结果:(24, 'szz_xiaobai', 'cd_whc')

    定义形参时可以指定参数类型,但并不一定要按照指定的数据类型传参

    def add_user(username:str,password:str):#指定参数数据类型
        print('username',username)
        print('password',password)
    add_user([12,3,4],1111)

    递归调用

    #判断输入的数字是不是偶数
    def even():
        num = input('请输入一个数字:').strip()
        if int(num)%2 != 0:
            print("请重新输入")
            even()#递归调用自己
    even()
  • 相关阅读:
    (十)条件判断
    (九)字符处理命令
    (八)awk命令
    (六)环境变量配置文件
    (七)grep命令行提取符号
    Ⅶ 类模板与STL编程 ②
    Ⅵ 虚函数与多态性
    Ⅴ 运算符重载
    Ⅳ 继承与派生②
    Ⅳ 继承与派生①
  • 原文地址:https://www.cnblogs.com/yanyan-/p/10749191.html
Copyright © 2011-2022 走看看