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

Lesson 81 python中函数的定义

文章目录

          • 1. 函数的定义
          • 2. 函数的创建
          • 3. 函数的嵌套
          • 4. 函数的形参和实参定义
            • 4.1 函数的形参
            • 4.2 函数的实参
          • 5. 函数的相关参数:位置参数,默认参数,可变参数,关键字参数
            • 5.1 位置参数
            • 5.2 默认参数
            • 5.3 可变参数
            • 5.4 关键字参数
          • 6. 形参的可变参数示例
          • 7. 函数的练习

1. 函数的定义

f(x) = ax^2 + bx + c

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

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

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

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

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

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

 hello()

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

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

 sum_2_sum()

81. python中函数的定义及参数介绍_第2张图片
这个函数只能算11+12的值,并不能计算任意两个数的和,不是真正意义上的函数

如果不主动调用函数,函数是不会执行的
函数应该是某一个功能的集合体,编写程序需要该功能的时候就去调用它
并不需要每次需要该功能的时候都写一段代码,即节省时间又节省空间

3. 函数的嵌套
 def westos():
     print('is westos')
     def python():
         print('python')
     python()

 westos()

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

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

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

def welcome(x):
    print('hello',x)
4.2 函数的实参

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

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

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

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

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

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

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

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

5.2 默认参数

形参和实参可以不一致,如果没有传递值,用默认值

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

 mypow(4)  
 mypow(2,4)

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

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)

81. 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'])
print(getStuInfo('westos','18'))

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

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

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

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)

81. python中函数的定义及参数介绍_第12张图片
可以看到,返回一个元组,大写字母为1个,小写字母为9个

  1. 编写函数, 接收一个列表(包含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))

81. python中函数的定义及参数介绍_第13张图片
可以看到,下标为3的前后元素都逆序输出了

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<=10
18, 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)

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

你可能感兴趣的:(Python)