Python基础(普通函数及参数)

# def my_abs(x):
#     if not isinstance(x,(int,float)):#参数类型做检查,只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance()
#         raise TypeError('错误的数据类型')
#     if x >= 0:
#         return x
#     else:
#         return -x
# print(my_abs(-300))
# print(my_abs('abc'))

# import math
# def move(x,y,step,angle=0):
#     nx = x + step * math.cos(angle)
#     ny = y + step * math.sin(angle)
#     return nx,ny#返回值是一个tuple
# print(move(100,70,60,math.pi/6))

# def nop():
#     pass#pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来
# print(nop())

#位置参数
# def add(x):
#     return x + 1
# print(add(1))

#默认参数
#一是必选参数在前,默认参数在后,否则Python的解释器会报错。
#当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
# def power(x,n=2,y=6):
#     s = 1
#     print(y)
#     while n > 0:
#         n = n - 1
#         s = s * x
#     return s
# print(power(5,2))
# print(power(10))
# print(power(5,y=200))#默认参数可以指定参数名称来传参,y参数用传进去的值,其他默认参数继续使用默认值。

# #定义默认参数要牢记一点:默认参数必须指向不变对象l=[],用l=None这个不变对象来代替l=[]。
# def arr(l=None):
#     if l is None:
#         l = []
#     l.append('abc')
#     return l
# print(arr())

#可变参数
# def calc(*numbers):#定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号,函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变
#     sum = 0
#     for num in numbers:
#         sum = sum + num * num
#     return sum
# print(calc(1,2,3,4,5,6))
# print(calc())#调用该函数时,可以传入任意个参数,包括0个参数

# nums = [1,2,3,4,5,6,7,8,9]
# print(calc(*nums))#*nums表示把nums这个list的所有元素作为可变参数传进去

#关键字参数
# def person(name,age,**kw):#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
#     print('name',name,'age',age,'other',kw)
# person('傻狗1',100,city='傻狗2')

# extra = {'city':'傻狗4','job':'傻狗5'}
# person('傻狗3',200,**extra)#相当于person('傻狗3', 200, city=extra['city'], job=extra['job'])
#**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

#命名关键字参数
# def person(name,age,*,city,job):#命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
#     print(name,age,city,job)
# person('傻狗1',100,city='傻狗3',job='傻狗4')
# def person(name,age,*args,city='傻狗2',job):#如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
#     print(name,age,args,city,job)
# arr = [1,2,3]
# person('傻狗1',100,*arr,city='傻狗2',job='傻狗3')
# person('傻狗1',100,*arr,job='傻狗3')#命名关键字参数city具有默认值,调用时,可不传入city参数

#参数组合
#可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
# def person(name,age=100,*args,city,**kw):
#     print(name,age,args,city,kw)
# arr = [1,2,3]
# extra = {'job1':'傻狗3','job2':'傻狗4'}
# person('傻狗1',200,*arr,city='傻狗2',**extra)

# arr1 = ['傻狗1',200,1,2,3]
# extra1 = {'city':'傻狗2','job1':'傻狗3','job2':'傻狗4'}
# person(*arr1,**extra1)#对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的

def product(*args):
    sum = 1
    for num in args:
        sum = num * sum      
    return sum
arr = 1,2,3,4,5,6
print(product(*arr))

#默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误。
#*args是可变参数,args接收的是一个tuple。
#**kw是关键字参数,kw接收的是一个dict。
#可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))。
#关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。



    

猜你喜欢

转载自www.cnblogs.com/xingxingclassroom/p/10861245.html
今日推荐