python入门(函数)

本文详细介绍了Python中的函数,包括函数的概念、定义与调用、变量作用域、参数传递方式,以及如何处理任意数量的参数。通过案例分析了函数的输出、返回值、局部与全局变量的区别,并探讨了如何通过关键字传递参数和处理可选参数。此外,还讨论了传递列表和字典作为函数参数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数简介

什么是函数:

  • 其实就是一段代码,这段代码可以重复的执行,通过函数可以实现代码的复用

  • 函数是不能自己主动执行的,必须被调用的时候才能被执行

python的模块

  • 一个python文件的,就是一个模块

函数分类

  • 全局函数:直接定义在模块中的函数就是全局函数

  • 局部函数:定义在函数内部的子函数,这样的函数就是局部函数

  • 匿名函数: 也称之为lambda函数,其实是一个表达式

  • 方法:方法也是一种函数,只是函数需要和特点的数据类型绑定使用

定义函数

def 函数名():
    语句
    语句
    ...

调用函数

函数名()

案例:

# 定义一个函数
# 函数名是f1
def f1(): 
    print("1")
    print("ok")
    print("2")
​
​
print("start process...")
​
# 调用函数
f1()
​
print("over")

执行函数的结果

  • 函数的输出:在函数中用print来输出一个结果,这个可以可以直接显示

    • 输出用:print

    • 输出结果:可以直接打印出来

  • 函数的返回值:在函数中用return 来返回一个或者多个结果,这个结果可以用来接收,一旦执行到return,那么return后面的代码就不会再执行了,也就是会直接退出函数,返回到主程序继续运行

    • 返回用:return

    • 返回值:可以再主程序进行接收,如果返回多个值,那么多个值会保存成一个元组

案例:用函数计算两个数字的和

# =================方法1:在函数中用print显示执行结果================
# 定义函数
def fun1():
    num1 = int(input("请输入数字:"))
    num2 = int(input("请输入数字:"))
    sum = num1 + num2
    # 将求和的结果打印输出
    print(sum)
​
​
print("启动.....")
​
# 调用函数
fun1()
​
print("结束.....")
​
#=================方法2:在函数中用return返回执行结果================
# 定义函数
def fun1():
    num1 = int(input("请输入数字:"))
    num2 = int(input("请输入数字:"))
    sum = num1 + num2
    # 将求和的结果返回到主程序
    return sum
​
​
print("启动.....")
​
# 调用函数
# 如果函数有返回值的话,那么在调用函数的时候,就必须用变量来接收这个返回值
res = fun1()
# 打印函数的返回值
print(res)
​
print("结束.....")

补充:

在使用函数的时候,一旦函数执行到了return那么,函数中,return后面的代码就不会再继续执行了

函数中,如果返回值有多个,那么这多个返回值会组合成一个元组

函数的说明文档

  • 一般情况先,每个函数都应该有个说明文档,来解释这个函数的作用以及使用方法

  • 查看函数的说明文档的方法

函数名.__doc__

案例:

def f1():
    """
    这是我们的一个测试函数,函数的没有输出,但是有返回值,返回是3
    这个函数有xxxx
    欢迎使用这个
    .....
    :return:
    """
​
    name = "tom"
    age =3
    addr = "hebei"
    return name,age,addr
​
print(f1.__doc__)

二、变量的作用域

  • 本地变量:定义在模块中的【主程序中的变量】,有效范围是整个python文件,包括主程序和函数内部

  • 局部变量:在函数中定义变量,默认有效范围仅仅在函数内部

  • 内置变量:由python自己定义的

注意事项:

  • 变量的作用范围越小,优先级越高

  • 局部变量优先级 > 本地变量

  • 修改局部变量,不会修改全局变量

  • 程序找变量的过程

    • 首先找最近的变量的,如果有就直接使用;如果没有,就向上层查找

def f1():
    x = 2    # 局部变量
    z = 5    # 局部变量
    print(x,y,z)
​
x = 1     # 全局变量
y = 3     # 全局变量
​
print(x,y)     # 输出 x 是 1,y 是 3
​
f1()           # 将 x 改为 2,z 设置为5 ,然后输出x y z  也就是输出 2  3  5
​
print(x,y)     # 输出 x 和 y,  此时 x 是 1,y 是 3

默认情况下:函数中的变量是局部变量,但是可以用关键字:global将变量明确指定成全局的

x = 1     # 全局变量
y = 3     # 全局变量
​
def f1():
    x = 2         # 局部变量
    z = 5         # 局部变量
    global y      # 全局变量【将局部变量y转换为全局变量】
    y = 0         # 为转换后的全局变量赋值 0
    print(x,y,z)
    return 3
    global x
    x = 0
​
print(x,y)     # 输出 x 是 1,y 是 3
​
f1()           # 将 x 改为 2,z 设置为5 ,然后输出x y z  也就是输出 2  3  5
​
print(x,y)     # 输出 x 和 y,  此时 x 是 1,y 是 0

三、函数传递参数

def 函数名(变量):
    代码

案例1:定义一个函数,实现像函数传递两个数字,自动计算这两个数字的计算结果

# 定义函数
# 函数名后面的括号中的内容称之为 形参,其实就是一个变量而已
# 如果函数有形参,那么在调用函数的时候,就必须为每个形参传递一个值
def fun1(num1, num2):
    sum = num1 + num2
    print(sum)
​
# 调用函数
# 调用函数的时候,函数名后面括号中的内容是 实参
# 实参的个数必须和定义函数时候形参的数量保持一直
# 每个实参,会逐一赋值给每个形参
fun1(3,5)
fun1(3,6)
fun1(2,7)

案例2:定义函数,向函数传递两个数字和一个符合,实现计算器的功能在

# 定义函数
# 函数名后面的括号中的内容称之为 形参,其实就是一个变量而已
# 如果函数有形参,那么在调用函数的时候,就必须为每个形参传递一个值
def fun1(num1, num2, opt):
    if opt == '+':
        sum = num1 + num2
    elif opt == '-':
        sum = num1 - num2
    elif opt == '*':
        sum = num1 * num2
    elif opt == '/':
        sum = num1 / num2
​
    print(sum)
​
# 调用函数
# 调用函数的时候,函数名后面括号中的内容是 实参
# 实参的个数必须和定义函数时候形参的数量保持一直
# 每个实参,会逐一赋值给每个形参
fun1(3,5,'+')
fun1(3,6,"*")
fun1(2,7,"-")
fun1(8,2,"/")

参数的默认值

  • 如果函数要求传递参数,但是调用的时候没有传递,那么就会报错

案例1:

def printWellcome(name="jack"):     # name = “jack“ 这是为参数设置默认值
    print("hello %s"%(name))
​
userInput1 = input("请输入姓名:")
​
printWellcome()            # 调用函数,没有向函数传递参数,此时函数会使用参数的默认值
​
printWellcome(userInput1)  # 调用函数,向函数传递参数,此时函数会使用传递进来的参数

案例2:函数有四个参数,name,age,tel、addr,要求必须 传递name和age,tel和addr两个参数可以不传递,如果用户没有给tel和addr传递参数,默认用nul

def printWellcome(name, age, tel="nul", addr="nul"):
    print("姓名是%s, 年龄是%s, 电话是%s, 地址是%s"%(name,age,tel,addr))
​
userInput1 = input("请输入姓名:")
userInput2 = input("请输入年龄:")
userInput3 = input("请输入电话:")
userInput4 = input("请输入地址:")
​
printWellcome(userInput1,userInput2)
printWellcome(userInput1,userInput2,userInput3)
printWellcome(userInput1,userInput2,userInput3,userInput4)

基于关键字来进行传递参数

  • 要求:定义函数时候参数的名字必须和调用时候参数的名字一直

  • 格式

# 定义函数
def fun1(p1,p2,p3="nul"):         # 此时参数的名字分别是p1  p2  p3
​
# 调用函数
fun1(p1=xx,p2=xx)                 # 此时必须明确指定p1=x  p2=x  p3=x

案例:

def fun1(p1,p2,p3="nul"):
    if p3 == "nul":
        print("姓名是 %s, 年龄是%s"%(p1,p2))
    else:
        print("姓名是 %s, 年龄是%s, 地址是%s" % (p1, p2, p3))
​
uname = input("name:")
uage = input("age:")
uaddr = input("addr:")
fun1(p2=uage,p1=uname)

总结

1)定义函数

def 函数名():

代码

2)调用函数

  • 函数名()

3)函数的执行结果

  • 第一种:直接在函数中用print输出结果

  • 第二种:在函数中用return返回结果给主程序,在主程序中必须用一个变量来接收返回结果

4)变量作用域

  • 类型:全局变量、局部变量

  • 在主程序中定义的变量是全局变量,在函数中定义的变量的是局部变量

  • 通过使用global关键字可以将局部变量变成全局变量

  • 在主程序中,仅仅可以使用全局变量,在函数中可以使用全局和局部变量

5)函数传参

  • 概念:形参和实参

  • 一般要求形参和实参的个数要保持一致,除非形参是有默认值的

  • 一般要求实参和形参必须保持顺序是一致的,除非在调用函数的时候明确指定每个形参的值

四、传递任意个参数

  • 魔法赋值

方法1 def fun1 (*参数)

  • 此方法用于接受任意个参数,得到的是一个元组

def fun1(*p1):
    print(p1)      # p1用于接收和保存传递进来的多个参数,多个参数是以元组的形式保存的
​
fun1()
fun1("a")
fun1("a","b")      # 向函数传递多个参数

方法2 def fun2 (**参数)

  • 此方法用于接受任意个参数,得到的是一个字典

def fun1(**p1):
    print(p1)      # p1用于接收和保存传递进来的多个参数, 数据是以字典的形式保存的
​
fun1()
fun1(name="tom")
fun1(name="tom", age="18")
fun1(name="tom", age="18", addr="hebei")

向函数来传递列表和字典

  • 传递列表

def fun1(*p1):    # 如果想通过列表来传递参数,那么形参需要这样写
    print(p1)
​
li = ["tom","jerry",18,136666,"jack"]
​
fun1(li)    # 将列表当成一个整体,传递给函数
fun1(*li)   # 将列表中的每个元素单独作为一个元素传递到函数中
传递
字典
def fun1(**p1):    # 如果想通过列表来传递参数,那么形参需要这样写
    print(p1)
​
d1 = {"name":"tom","age":18,"addr":"hebei"}
​
fun1(**d1)   # 将列表中的每个元素单独作为一个元素传递到函数中

案例:编写一个函数,输入三个数,输出最大值

import sys
​
def com(x,y,z):
    maxNum=x;
    if y>maxNum:
        maxNum=y;
        if z>maxNum:
            maxNum=z
    return maxNum
​
a=input("please input first number:",)
b=input("please input second number:",)
c=input("please input third number:",)
m=com(a,b,c)
print("a,b,c中最大值为:",m)

案例:统计字符串中不同字符的个数

import sys
def deal_char(li):
    list=[]
​
    # list.append(float(max(li)))
    # list.append(float(min(li)))
    upper=0
    lower=0
    num=0
    other=0
    # str.__len__()
    for i in  range(li.__len__()):
        if li[i].isupper():
            upper+=1
        elif li[i].islower():
            lower+=1
        elif li[i].isnumeric():
            num+=1
        else:
            other+=1
    list.append(upper)
    list.append(lower)
    list.append(num)
    list.append(other)
​
    print("list:",list)
    return tuple(list)
if __name__=="__main__":
    # print("请输入一个序列:")
    # while
    ll=input("please input some char(or a string):",)
​
    # print(type(lll))
    deal=deal_char(ll)
 print("tuple contain count with upper char,lower char ,number and others:",deal) 

总结

1、定义和调用

# 定义
def  函数名(参数,...):
    代码
    代码
​
# 调用
函数名()   

2、函数的输出和返回

函数中输出内容

  • 在函数中直接通过print进行输出

函数的返回值:return

  • 函数一旦执行到return,函数后面的部分就不会再执行

  • 在主程序中,可以通过一个变量来接收函数的返回值

  • 函数的返回值如果有多个值,那么这多个值会保存成一个元组

3、变量作用域

  • 全局:变量的有效范围是整个python模块

  • 局部:变量的有效范围是一个特定的函数的内部

作用域的特点

  • 在函数中,定义变量,默认都是局部变量

  • 在函数中定义全局变量,可以用global进行定义【不建议这么左】

4、参数传递

  • 根据位置变量传递参数

  • 根据关键字传递参数

  • 可选参数:函数的参数有默认值,那么这个参数激素可选参数

  • 传递列表

  • 传递字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值