python中函数的定义及参数介绍

1. 函数的定义

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
函数能提高应用的模块性,和代码的重复利用率
Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
其实函数就是可以实现某一个功能的代码块,下次使用的时候直接调用函数就行

2. 函数的创建

定义一个函数,你可以定义一个有自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:
然后,在缩进块中编写函数体,函数的返回值用return语句返回

自定义一个打印hello的函数:

def hello():
     print('hello1')
     print('hello2')
     print('hello3')

 hello()

python中函数的定义及参数介绍_第1张图片

def sum_2_sum():
     num1 = 20
     num2 = 30
     result = num1 + num2
     print('%d + %d = %d' %(num1,num2,result))

 sum_2_sum()

python中函数的定义及参数介绍_第2张图片
备注:如果不主动调用函数,函数是不会执行的
函数应该是某一个功能的集合体,编写程序需要该功能的时候就去调用它
并不需要每次需要该功能的时候都写一段代码,即节省时间又节省空间

3. 函数的嵌套

 def westos():
     print('is westos')
     def python():
         print('python')
     python()

 westos()

python中函数的定义及参数介绍_第3张图片
可以看到,westos函数中嵌套了python函数,则遇到westos()函数的调用,先执行westos函数,再遇到python函数的调用,再执行python函数

4. 函数的形参和实参定义

4.1 函数的形参
定义函数的时候的变量 叫形参(形参可以任意起名)

def welcome(x):
    print('hello',x)

4.2 函数的实参
真实的数据信息,调用函数时传递的参数 叫实参

welcome('alice')
welcome('yanyuan')

python中函数的定义及参数介绍_第4张图片

5. 函数的相关参数:位置参数,默认参数,可变参数,关键字参数

5.1 位置参数
位置参数:形参和实参个数 位置必须保持一致

def getInfo(name,age):
     print(name,age)

 getInfo('laoli',38)
# getInfo(38,'laoli')

python中函数的定义及参数介绍_第5张图片
可以看到,如果将形参和实参的顺序或个数弄错,可能会出现以上的错误示例,影响到结果的获得,得不到想要函数执行的正确结果,从而完成相应功能
5.2 默认参数
形参和实参可以不一致,如果没有传递值,用默认值

def mypow(x,y=2):
     print(x**y)

 mypow(4)  
 mypow(2,4)

python中函数的定义及参数介绍_第6张图片
5.3 可变参数

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)

python中函数的定义及参数介绍_第7张图片
参数的解包:在参数名前加*

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)

python中函数的定义及参数介绍_第8张图片
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')

python中函数的定义及参数介绍_第9张图片
当传入的字典为空时,显示空字典

6. 形参的可变参数示例

(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) #查看返回值

python中函数的定义及参数介绍_第10张图片
(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)

python中函数的定义及参数介绍_第11张图片
(3)编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和
一个整形数k, 返回一个新列表.
函数需求:

  • 将列表下标k之前对应(不包含k)的元素逆序;
  • 将下标k及之后的元素逆序;
    [1,2,3,4,5] 2 [2,1,5,4,3]
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))

python中函数的定义及参数介绍_第12张图片

7. 函数的练习

对于一个十进制的正整数, 定义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)

python中函数的定义及参数介绍_第13张图片
当k为51,n在5000到10000中有三个数满足条件。

你可能感兴趣的:(python)