Python入门到精通(四):函数的基础知识

函数

一、函数简介

1.1、什么是函数:

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

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

python的模块

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

1.2、函数分类

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

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

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

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

1.3、函数的定义与调用

定义函数

1.def是英文define的缩写
2.函数名称应该能够表达函数封装代码的功能,方便后续的调用
3.函数名称的命名应该符合标识符的命名规则
    可由字母,下划线和数字组成
    不能以数字开头
    不能与关键字重名

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

调用函数

def f1():                  # 定义一个名为 f1的函数
    print("1")    
    print("ok")
    print("2")


print("start process...")

f1()                       # 调用函数 f1

print("over")

1.4、执行函数的结果

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

    • 输出用:print

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

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

    • 返回用:return

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

def userdate():                               # 定义一个名为 userdate 的函数
    num1 = int(input("请输入第一个数字:"))
    num2 = int(input("请输入第二个数字:"))
    if num1 > num2:                           # 如果num1 > num2 函数返回值为num1
        return num1
    else:
        return num2                           # 如果num1 < num2 函数返回值为num2


print(userdate())                             # 输出函数的返回值

1.5函数的说明文档

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

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

函数名.__doc__

二、变量的作用域

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

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

  • 函数执行结束后,函数内部的局部变量,会被系统回收

  • 不同的函数,可以定义相同的名字的局部变量,但是各用各的不会产生影响

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

注意事项:

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

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

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

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

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

x = 1     # 全局变量
y = 3     # 全局变量

def f1():
    x = 2         # 局部变量
    z = 5         # 局部变量
    global y      # 全局变量【将局部变量y转换为全局变量】
    y = 0         # 为转换后的全局变量赋值 0
    print(x,y,z)

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

三、函数传递参数

3.1函数的参数分为形参和实参

  • 定义时小括号中的参数,用来接收参数用的,称为 “形参
  • 调用时小括号中的参数,用来传递给函数用的,称为 “实参

 形参

定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
def 函数名(变量):
	代码

参数的默认值

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

实参 

调用函数时,小括号中的参数,是用来把数据传递到函数内部用的
def printWellcome(name="jack"):     # name = “jack“ 这是为参数设置默认值
    print("hello %s"%(name))

userInput1 = input("请输入姓名:")

printWellcome()            # 调用函数,没有向函数传递参数,此时函数会使用参数的默认值

printWellcome(userInput1)  # 调用函数,向函数传递参数,此时函数会使用传递进来的参数

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

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

# 定义函数
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)

 3.2参数传递

函数的参数传递本质上就是:从实参到形参的赋值操作。 Python 中“一切皆对象”, 所有的赋值操作都是“引用的赋值”。所以,Python 中参数的传递都是“引用传递”,不 是“值传递”。具体操作时分为两类:

    1.对“可变对象”进行“写操作”,直接作用于原对象本身。
    2.对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。(起到其他语言的“值传递”效果,但不是“值传递”)

1.可变对象有: 字典、列表、集合、自定义的对象等2.

2.不可变对象有: 数字、字符串、元组、function 等

 1.传递可变对象的引用:传递参数是可变对象(例如:列表、字典、自定义的其他可变对象等),实际传递的还是对象的引用。在函数体中不创建新的对象拷贝,而是可以直接修改所传递的对象。
2.传递不可变对象的引用传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。

四、传递任意个参数

  • 魔法赋值

方法1 def fun1 (*参数)

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

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


fun1("a","b")      # 向函数传递多个参数
# 输出结果是('a', 'b')

 方法2 def fun2 (**参数)

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

def fun1(**p1):
    print(p1)      # p1用于接收和保存传递进来的多个参数, 数据是以字典的形式保存的

fun1(name="tom", age="18", addr="hebei")
# 输出结果是{'name': 'tom', 'age': '18', 'addr': 'hebei'}

猜你喜欢

转载自blog.csdn.net/weixin_67281781/article/details/123573856