# 函数:定义函数(函数名,参数,函数体(返回值)),调用函数
# 参数:普通参数,默认参数(name=lili),可变参数(*args)--参数值可任意个返回元组形式,
# 命名关键字参数,关键字参数(**kw)--参数值可任意个返回字典形式
# 可变数据类型:list列表,dict字典,set()集合
# 不可变数据类型:number,string,tuple元组
# 变量作用域:局部local,闭包内函数外,全局global,内建bulid-in
# 小结
# 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
# 要注意定义可变参数和关键字参数的语法:
# *args是可变参数,args接收的是一个tuple;
# **kw是关键字参数,kw接收的是一个dict。
# ------------------------演示-------------------------------
# 关键字:
# # def person(name,age,**kw):
# # print('name:',name,'age:',age,'other:',kw)
# # person('Frank','37')
# # person('Frank','37',city='Shanghai')
# # person('Frank','37',gender='M',job='Engineer')
# # 也可以写成下面的简约形式:
# # extra = {'city': 'Beijing', 'job': 'Engineer'}
# # person('Jack', 24, **extra)
# # 注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
# 不定长参数:
# def calc(*numbers):
# sum = 0
# for n in numbers:
# sum = sum + n * n
# return sum
# 调用时: nums = [1, 2, 3]
# calc(nums[0], nums[1], nums[2])
# 或
# nums = [1, 2, 3]
# calc(*nums)
# *nums表示把nums这个list的所有元素作为可变参数传进去
# ----------------------练习---------------------------
# def subtraction(a,b):
# print(a - b)
# def mul(a,b):
# print(a * b)
# def division(a,b):
# return a / b
#
# subtraction(2,1)
# mul(4,6)
# print(division(34,2))
# 求一个数的阶乘
# def jiecheng(n):
# m = n - 1
# mul = n
# while m > 0:
# mul *= m
# n -= 1
# m -= 1
# return mul
# num = int(input('Please enter a number:'))
# print(jiecheng(num))
# def jiecheng2(n):
# result = 1
# for i in range(n):
# result *= (i+1)
# return result
# num = int(input('Please enter a number:'))
# print(jiecheng2(num))
# 求两个相同长度列表的相应位置的和,并组成一个新的列表,将新列表返回
# def sum(list1,list2):
# list3 = []
# for i in range(len(list1)):
# add = list1[i] + list2[i]
# list3.append(add)
# return list3
# lista = [1,2,3,4,5]
# listb = [7,8,9,0,6]
# print(sum(lista,listb))