python - 函数形参之四大参数类型

参数:形参 实参
形参的分类:位置参数 默认参数 可变参数 关键字参数

1.位置参数
#位置参数:形参和实参必须保持一致

def getInfo(name, age):  # 按照位置传递参数
    print(name, age)
getInfo(age=18, name='name')
getInfo(name=18,age='name')

输出:

name 18
18 name

2.默认参数
#默认参数:形参和实参可以不一致

def mypow(x, y=2): 	#设置	第二个参数y的默认值为2
    """			#函数中输入''' ''',会自动弹出
    求x的y次方
    :param x:
    :param y:
    :return:
    """
    print(x ** y)


mypow(4)  # 在没有设置y值时,默认y=2
mypow(4, 3)  # 设置了y值的时候,就执行x**y,这里就是4**3,而不是4**2

输出:

16
64

3.可变参数

def mySum(*args):	
    """
    需求:用户可以传递任意的值,计算数值的和
    *args:是一个可变参数,可以传递任意参数类型[ ],{ },( )
    args:是元组数据类型。函数在调用的时候内部自动组装成一个元组类型。
    :param args:
    :return:
    """
    sum = 0
    for item in args:
        sum += item
    print(sum)
mySum(1,2,3,4,5,6,7,8)

输出:

  36

变换参数类型:

nums = [1,2,3,4,5,6]		#list
nums1 = (2,5,6,7,9,10) 		#tuple
nums2 ={1,2,3,4,5,6,7,8}	#set
mySum(*nums2)			#*解包,把list,set,tuple的元素变成可变参数传进去
mySum(*nums1)
mySum(*nums)

输出:

36
39
21

#*的作用是解包

score = (12, 23, 56, 78, 90)
minscore, *middlescore, maxscore = score
print(*middlescore)	#一个*为解包
print(middlescore)

输出:

23 56 78
[23, 56, 78]

4.关键字参数
-1#**kwargs 接收字典

def getStuInfo(name,age,**kwargs):
    print(name,age)
    print(kwargs)
#kwargs接收的时字典
getStuInfo('westos',11,hobbies=['code','running'],gender='female')

输出:

westos 11
{'hobbies': ['code', 'running'], 'gender': 'female'}

-2#如果要对字典进行解包。
(一个星号:获取key值)

d = dict(a=1,b=2)
print(*d)	#一个星号,获取key值

输出:

a b

def getStuInfo(name,age,**kwargs):
    print(name,age)
    print(kwargs)
    
d = dict(a=1,b=2)
getStuInfo('westos',11,**d)		#两个星号,**d解包把字典传入

输出:

westos 11
{'a': 1, 'b': 2}

练习:
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=10
18, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3

def f(n):
    # 1.先把数字转换成为字符串
    n = str(n)
    # 2.计算字符串中每个数的平方
    sum = 0
    for item in n:
        sum += int(item)**2
    return sum

def isOK(k,n):
    if k * f(n) == n:
    #调用了上面f(n)函数
        return True
    else:
        return False


def main():
    k = 51
    a = 5000
    b = 10000
    count = 0
    for i in range(a,b+1):
        if isOK(k,i):
            count += 1
    print(count)

main()

输出:

3

用debug调试会更容易理解:
在isOK(k,n)函数中,判断 if k * f(n) == n:会进入f(n)函数,这里用debug进行了调试,返回结果sum再次进入isOK(k,n)的判断。

在这里插入图片描述

得到f(n)的返回值,进行判断。
在这里插入图片描述

如果觉得函数的方法不能理解,可以先看懂下面普通方法:

# 1.接收变量k,a,b
s = input('请输入(k,a,b):')  # '51 5000 10000'
# 存储整型k,a,b
li= []
"""
例如:字符串拆分
st = 'hello python hellp world'
print st.split()
['hello', 'python', 'hellp', 'world']
"""
for item in s.split():
    li.append(int(item))
    #将字符串型转换为整型
k,a,b=li
#这里利用列表一次给三个变量赋值

# 2.进行判断是否满足条件
count = 0
for i in range(a,b+1):
    if k*f(i) == i:
        count +=1
print(count)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值