Python中的函数与类

python 中的函数与类

初识函数

函数:是封装了某一功能的代码块,可以重复使用。

内置函数

是Python已经提前定义好的函数,当遇到具体场景可以直接使用。

len()函数

返回对象的长度或元素个数:

length = len([1,2,3,4,5])
print(length)   # 输出:5
    # 返回字符串中元素的个数:
name = len("Barbara")
print(name)  # 输出:7
    # 返回元组的长度:
fruit = len(("apple","banana","pear"))
print(fruit)  # 输出:3
type()函数

查询对象的数据类型

print(type(1))  # 整型
print(type("barbara"))  # 字符串
  # 输出:   

定义函数

def sayHi():  # sayHi是函数名
    print("Hi")  # 实现函数的功能

关键字def是用来高数Python,我们要定义新函数。
def 在英语里是define的缩写,本意是“定义”,它是定义函数的固定形式。
命名规则
1. 函数名最好是动词,尽量体现函数的功能。
2. 用字母,下划线和数字组成,且不以数字开头。
3. 不与关键字重名,不出现下划线—以外的特殊符号。

调用函数:

def sayHi():   # 定义函数
    print("Hi")
 # 调用函数
 sayHi()
  # 程序通过函数名,来定位函数体中的代码

函数设置参数

def sayWelcome(disount):  # 形参
    print("欢迎光临")
    print(f"商品一律{discount}")
    sayWelcome("7.8折")  # 实参

形参和实参

形参定义函数时,括号内指定的变量名
实参调用函数时,括号内设置的数据
实参本质是“数据”,调用函数时,会把这个函数传递给形参

传递实参

关键字实参
调用函数时,直接在括号内指名道姓地对形参进行赋值。形参=实参的方式传递数据

def sayWelcome(store,discount):
    print(f"欢迎光临{store}")
    print(f"商品一律{discount}")
 # 调用函数
 sayWelcome(store="商品店",discount="7.8折")   
 # 使用形参=实参的方式传递

关键字实参的顺序无关紧要,只要给形参赋值相同的实参,结果都一样。
sayWelcome(store="商品店",discount="7.8折") sayWelcome(discount="7.8折",store="商品店")结果相同
位置实参

def sayWelcome(store,discount):
   print(f"欢迎光临{store}")
   print(f"商品一律{discount}")
   # 调用函数
   sayWelcome("水果铺","7.8折)

缺少实参
实参和形参个数应该保持一致,缺少实参会程序报错。
位置实参的顺序
位置实参的顺序很重要,如果指定错误,则结果会受影响:

def petMsg(name,pet):
    print(f"{name}有一只{pet}")
petMsg("小明","猫") # 输出:小明有一只猫
petMsg("猫","小明") # 输出:猫有一只小明

默认值形参

def getArea(R,pi=3.14):  # 默认值形参
    area = pi*R*R
    print(area)
# 调用函数,设置实参为2
getArea(2)

参数的优先级
调用函数时,如果给默认值形参提供了实参值,那么该形参将优先使用实参值

def getArea(R,pi=3.14):
    area = pi*R*R
    print(area)
getArea(2,3.1415)
  # 输出:12.56636

如上图,形参pi会优先使用接受的实参值3.1415,而不是默认值3.14
默认值形参的位置
在定义函数时,先写非默认的形参,后写默认值形参
也就是所=说,默认值形参只能放在非默认值形参的后面,否则会程序报错。
例如:def getArea(pi=3.14,R) getArea(2)
可以理解为:调用函数时,程序不知道数据2到底是修改pi的默认值,还是传递给R

函数的返回值

def getArea(length):
    area = length*length
    print(area)
if getArea(13) > 160:
    print("面积足够大")   # 此时程序会报错

因为函数内数据被直接输出,没有传递到函数外,没办法用getArea(13)和160比较大小。

return

def getArea(length):
    area = length*length
    return area
 # 调用函数,再将结果赋值给变量result
 result = getArea(13)
 print(result)   # 输出:169

关键字return,将函数内的数据返回到调用函数的位置
return后面是指定的返回值,返回值会返回到调用的地方
调用函数的代码getArea(13)等同于一个变量,用于保存函数的返回值169
Python中的函数与类_第1张图片
任意类型的返回值
return的返回值没有类型限制,可以是一个变量名,一串字符串,甚至是一个表达式。
return length*length
返回多个值

def getSize(length):
    perimeter = 4*length
    area = length**2
    return perimeter,area # 用逗号隔开
print(getSize(6))  # 输出:(24,36)元组

当函数返回多个值时,返回值间用逗号隔开。此时的返回值,会以元组的形式返回。
return的位置
return是函数结束的标志
函数内可以有多个return,但只要执行一次,整个函数就会结束运行。所以return的位置决定了函数能执行到哪一步。

def add(num):
    total = 0
    for i in num:
        total = total+i
    return total  # 循环结束后再返回total
number = add([1,2,3])
print(number)
def add(num):
    total = 0
    for i in num:
        total = total+i
        return total  # 第一次循环后直接返回total
number = add([1,2,3])
print(number)

局部变量和全局变量

局部变量:就是在函数内部定义的变量,只能在函数内使用,出了函数就不能使用了。
Python中的函数与类_第2张图片
全局变量:就是在函数外定义的变量。可以在函数内使用,也可以在函数外使用。
同名变量

pi = 3.14   # 全局变量
def getArea(radius):
    pi = 3.1415   # 局部变量
    area = pi*radius*radius
    return area
print(getArea(2))  # 输出:12.566
print(pi)   # 输出:3.14

第1和第3行都定义了变量pi,但是本质上他们不是同一个变量。
因为第3行的pi在函数内重新定义了,属于局部变量,不论如何赋值都不会影响到第一行的全局变量pi的值
所以,建议对全局变量和局部变量使用不同的变量名

递归和匿名函数

匿名函数

 # 使用 lambda 创建匿名函数,并赋值给变量square
square = lambda x:x*x      # x为形参
  # 通过变量名square,传入参数9,调用该匿名函数,并输出
  print(square(9))  
  

关键字lambda,用来创建匿名函数。
表达式x*x,是函数的返回值,这个表达式的结果将返回到调用函数的地方。
所以匿名函数可以看做是return型的简便写法。
变量square,可以通过该变量调用匿名函数
多个形参

add = lambda x,y:x+y
print(add(3,4))
  # 调用函数时,以位置实参的方式,依次传递数据。

递归函数

数学例子:
假设sum()等于前n个正整数的和,即:
sum(n)=1+2+3+4+(n-1)+n
直接计算会很麻烦,用递归的思想,将原始问题拆解为等价的子问题。
换句话说,我们要计算sum(n),不妨先去计算更简单的sum(n-1)
但是,由于n变成了n-1,范围变小,为了保证等价,可以用sum(n-1)加上n
Python中的函数与类_第3张图片

 # 定义名为sum() 函数,传入参数n
def sum(n):
    if n == 1:
        return 1
    return n+sum(n-1)
 # 调用sum()函数,传入参数5,并输出
print(sum(5))   # 输出:15

终止条件
n == 1是终止条件,是递归执行到满足某一条件后,就返回具体的结果,避免程序无限递归下去。
递归前进条件
sum(n)等于n加上sum(n-1)。所以,函数返回了n+sum(n-1)

你可能感兴趣的:(python,开发语言)