函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
函数能提高应用的模块性,和代码的重复利用率
Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
其实函数就是可以实现某一个功能的代码块,下次使用的时候直接调用函数就行
定义一个函数,你可以定义一个有自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:
然后,在缩进块中编写函数体,函数的返回值用return语句返回
自定义一个打印hello的函数:
def hello():
print('hello1')
print('hello2')
print('hello3')
hello()
def sum_2_sum():
num1 = 20
num2 = 30
result = num1 + num2
print('%d + %d = %d' %(num1,num2,result))
sum_2_sum()
备注:如果不主动调用函数,函数是不会执行的
函数应该是某一个功能的集合体,编写程序需要该功能的时候就去调用它
并不需要每次需要该功能的时候都写一段代码,即节省时间又节省空间
def westos():
print('is westos')
def python():
print('python')
python()
westos()
可以看到,westos函数中嵌套了python函数,则遇到westos()函数的调用,先执行westos函数,再遇到python函数的调用,再执行python函数
4.1 函数的形参
定义函数的时候的变量 叫形参(形参可以任意起名)
def welcome(x):
print('hello',x)
4.2 函数的实参
真实的数据信息,调用函数时传递的参数 叫实参
welcome('alice')
welcome('yanyuan')
5.1 位置参数
位置参数:形参和实参个数 位置必须保持一致
def getInfo(name,age):
print(name,age)
getInfo('laoli',38)
# getInfo(38,'laoli')
可以看到,如果将形参和实参的顺序或个数弄错,可能会出现以上的错误示例,影响到结果的获得,得不到想要函数执行的正确结果,从而完成相应功能
5.2 默认参数
形参和实参可以不一致,如果没有传递值,用默认值
def mypow(x,y=2):
print(x**y)
mypow(4)
mypow(2,4)
def mysum(*a):
"""
# :param a:
# :return:
# *a:可变参数
# a:是元组数据类型
"""
sum = 0
for item in a:
sum += item
print(sum)
mysum(1,2,3,4,5,6)
def mysum(*a):
sum = 0
for item in a:
sum += item
print(sum)
nums1 = [1,2,3]
nums2 = (1,2,3)
nums3 = {1,2,3}
# 参数的解包:在参数名前加*
mysum(*nums1)
mysum(*nums2)
mysum(*nums3)
5.4 关键字参数
**kwargs是一个字典,可以传递任意多个key-value
def getStuInfo(name,age,**kwargs):
"""
:param name:
:param age:
:param kwargs:
:return:
"""
print(name,age)
print(kwargs)
getStuInfo('westos','20',gender='male',hobbies=['coding','running'])
getStuInfo('westos','18')
(1)编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所
有数.
def cacluate(*args): #定义一个cacluate函数
avg = sum(args) / len(args) #用和/个数得到平均值
up_avg = [] #定义一个大于平局值的列表
for item in args: #遍历args参数中的元素
if item > avg: #判断若元素大于平均值
up_avg.append(item) #则将这个元素追加再up_avg中
return avg,up_avg #返回所有参数的平均值,大于平均值的所有数.
a = cacluate(1,2,3,4,5,6,7) # 调用函数,进行测试
print(a) #查看返回值
(2)编写一个函数, 接收字符串参数, 返回一个元组,‘hellO WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
def f(x): #定义一个函数,形参为字符串参数
upper_count = 0 #定义大写字母的计数器
lower_count = 0 #定义小写字母的计数器
for i in x: #遍历字符串参数
if i.isupper(): #判断如果是大写
upper_count += 1 #大写字母的计数器加1
elif i.islower(): #判断如果是小写
lower_count += 1 #小写字母的计数器加1
else:
continue #既不是大写字母也不是小写字母,就继续执行
return upper_count,lower_count #返回大写字母和小写字母的个数
a = f('hellO world') #测试:调用函数,传入参数,以'hellO world'字符串为例
print(a)
(3)编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和
一个整形数k, 返回一个新列表.
函数需求:
def fun(li,k): #定义一个函数传入形参列表和下标值
if k < 0 or k > len(li): #若下标小于0或下标大于列表总长度
return 'error' #返回error
return li[:k][::-1] + li[k:][::-1] #否则返回索引值之前和索引值之后的所有元素逆序的列表
print(fun([1,3,5,4,2,56,78],3))
对于一个十进制的正整数, 定义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<=1018, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3
def f(n):
n = str(n)
sum = 0
for item in n:
sum += int(item) ** 2
return sum
# print(f(13))
# print(f(207))
#接收变量 k a b
s = input() #'51 5000 10000'
#存储整型k a b
li = []
for item in s.split():
li.append(int(item))
k,a,b = li
#判断是否满足条件
count = 0
for i in range(a,b+1):
if k * f(i) == i:
count += 1
print(count)