zoukankan      html  css  js  c++  java
  • Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数

    Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数

    一、Python参数类型

    形参:定义函数时的参数变量。

    实参:调用函数时使用的参数变量。

     

    参数传递的过程,就是把实参的引用传递给形参,使用实参的值来执行函数体的过程。

    Python 中,函数的实参/返回值都是是靠引用来传递的。

    在调用函数时,通常会传递参数,不同的参数处理不同的数据。一般有普通参数、默认参数、可变位置参数、可变关键字参数等。

     

    1.普通参数:按照参数位置,依次传递参数。

    def add(x,y):
        return x + y
    
    print(add(3,4))

    2.默认参数:定义函数时,可以给某个参数赋一个默认值。

    调用函数时,如果没有传入默认参数的值,则在函数内部使用参数默认值。

    要使用最常见的值作为默认值,从而简化函数的调用。

    如果一个参数的值不能确定,则不应该设置默认值,具体的数值在调用函数时由外界传递。在调用函数时,如果有多个默认参数,需要指定参数名,这样解释器才能够知道参数的对应关系。

    def add(x,y=1):
        return x+y
    
    print(add(2))
    print(add(2,3))

    当一个参数有默认值时,调用时如果不传递此参数,会使用默认值。

    注意:带默认值参数必须在不带默认值参数之后,否则会报错。

     

    3.可变位置参数

    定义参数时参数前面加一个*,表示这个参数是可变的,可以接受任意多个参数,这些参数构成一个元组,只能通过位置进行参数传递。实例如下:

     

    求一组数字的最大值,最小值,参数个数:

    def max(*a):
        m=n=a[0]
        for x in a:
            if x>=m:
                m=x
            else:
                n=x
        return m,n,len(a)
    
    b=input('输入若干数字,用空格隔开:').split()
    print(max(*b))

     

    运行结果:

     

    关于最后一行:print(max(*b))*b的作用是解包,否则传递的是整个列表

    如果不加*,则输出结果如下:

     

    4.可变关键字参数

    定义参数时,在前面加**,表示这个参数可变,可以接受任意多个参数,这些参数构成一个字典,只能通过关键字参数传递

     

    参数的混合使用:

    #位置参数可以和关键字参数一起使用。
    #当位置可变参数和关键字可变参数一起使用的时候,可变位置参数必须在前。
    
    def fn(*args,**kwargs):
        print(args)
        print(kwargs)
    
    fn(1,2,3,x=4,y=5)

    #普通参数可以和可变参数一起使用,但是传参的时候必须匹配 
    
    def fn(x,y,*args,**kwargs):
        print(x)
        print(y)
        print(args)
        print(kwargs)
    
    fn(1,2,3,4,5,a=6,b=7)

    #关键字可变参数不允许在普通参数之前
    #下面的方式定义会出错
    
    def fn(**kwargs,x):
        print(x)
    
    fn(a=1,2)

    #默认参数可以在可变位置参数之前
    
    def fn(x=5,*args):
    
        print(x)
    
    fn()

    参数解构(拆包)

    参数解构发生在函数调用的时候,可变参数发生在函数定义的时候。

     

    解构有两种形式:

    1.解构符号:*,解构的对象:可迭代对象。解构后的结果:位置参数。

    2.解构符号:**,解构的对象:字典。解构的结果:关键字参数。

     

    关键字参数解构,key必须是str类型

    def add(a,b):
        return a+b
    
    data = [4,3]
    print(add(*data))#位置参数解构
    data1 = {'a':3,'b':4}
    print(add(**data1))#关键字参数解构

     二、程序练习题

    5.2 实现 isOdd()函数,参数为整数,如果整数为奇数,返回True,否则返回False

     

    实现代码如下:

    def isOdd(num):
    
        if num%2!=0:
    
            return True
    
        else:
    
            return False
    
    
    s=eval(input("请输入一个整数:"))
    
    print(isOdd(s))        

     

    运行结果:

     

     

    5.3 实现 isNum()函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回True,否则返回False

     

    实现代码如下:

    def isNum(num):
    
        try:        
    
            n=type(eval(num))
    
            if n==type(1):#输入为整型
    
                return True
    
            elif n==type(1.0):#输入为浮点型
    
                return True
    
            elif n==type(1+1j):#输入为复数
    
                return True       
    
        except:
    
            return False
    
    
    n=input("请输入一个字符串:")
    
    print(isNum(n))

     

    运行结果:

     

     

     

     

    5.4 实现 multi()函数,参数个数不限,返回所有参数的乘积。

     

    实现代码如下:

    def multi(s):
    
        m = 1
    
        for i in s:
    
            m *= int(i)
    
        return m
    
    
    n=input("请输入若干整数:").split()
    
    print(multi(n))

     

    运行结果:

     

    5.5 实现 isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False

     

    实现代码如下:

    def isPrime(num):   
    
        try:
    
            num = eval(num)
    
            if type(num) == type(1):#判断输入是否为整型
    
                if num<=1:#判断一个数字是否是质数:质数是一个只能被自己和1整除的大于1的正整数。注意1不是质数。
    
                    return False
    
                elif num==2:#2是质数,这里单独作为一个条件是为了与下面的判断条件区分
    
                    return True
    
                else:
    
                    for i in range(2,num):#这里考虑的是大于2的正整数num,将这个数依次除以从2到num-1的整数进行取模运算,只要有一个数使它余数为0就说明它不是质数
    
                        if num % i == 0:
    
                            return False
    
                        else:
    
                            return True                     
    
            else:
        
                raise ValueError#引发ValueError异常
    
        except ValueError:#传入参数异常处理
    
            return "输入有误!请输入整数!"#这里没有使用print语句,如果没有给定return一个返回值,则函数的返回值为None
    
        except:#其他异常处理
    
            return "输入有误!请输入整数!"
    
    
    n = input("请输入一个整数:")
    
    print(isPrime(n))        

     

    运行结果:

     

     

     

  • 相关阅读:
    自动化运维
    rabbitmq常见问题
    常见的排序算法
    rabbitmq
    redis-其他应用
    redis之缓存穿透、雪崩、击穿
    redis-cluster(集群)
    redis -sentinel(哨兵)
    redis持久化
    redis简介
  • 原文地址:https://www.cnblogs.com/BIXIABUMO/p/11667801.html
Copyright © 2011-2022 走看看