首页 > 编程语言 >Python:函数

Python:函数

时间:2024-06-05 16:29:18浏览次数:30  
标签:函数 Python list print data def name

一、函数介绍

函数就是代码片段的封装,实现某一特定功能,当程序中需要执行该功能时,可以通过函数调用方式,执行函数中封装的代码片段

函数中三要素

  • 函数名 必须定义

  • 参数 (可选)将数据传递函数中使用

  • 返回值 (可选)将函数中的数据传递外部进行使用

二、函数使用

2-1 语法格式

  • def 是定义函数的关键

def 函数名(参数):
    代码的逻辑片段
    return 返回值
  • 函数的调用执行

函数名()

2-2 函数的基本定义和使用

# 函数的介绍
# 功能1
def login(name_list,password_list): # 接受参数
    # 函数作用域
    # 通过四个空格,来确认函数所执行的逻辑从哪里开始
    for num in range(3):  # [0,3)  0,1,2
        name = input('请输入用户名:')
        password = input('请输入密码:')
        # 先判断用户名是否正确
        if name in name_list:
            # 在判断密码是否正确
            if password in password_list:
                print('登录成功')
                # 适应break关键,会结束循环,不再进行取值
                break
            else:
                print('密码不正确')
        else:
            print('用户名不正确')
​
​
# 功能2
def register():
    name = input('请输入注册的用户名:')
    password = input('请输入出注册的密码:')
    name_list = [name]
    password_list = [password]
​
    # 将函数的的数据返回到外部
    return name_list, password_list
​
​
# 功能3
def pay():
    print('支付')
​
​
# 功能4
def order():
    print('下单')
​
​
​
​
name_list = None
password_list = None
​
while 1==1:
    num = input('1-登录 2-注册 3-支付 4-下单 5-退出程序:')
    if num == '1':
        # 函数功能的调用
        # namelist和password_list 是函数的参数
        login(name_list,password_list)  # 函数名()
    elif num == '2':
        name_list, password_list = register()
    elif num == '3':
        pay()
    elif num == '4':
        order()
    else:
       break

2-3 函数参数

  • 将数据传递到函数中使用

  • 可以在函数调用时,将需要处理的数据传递函数中代码片段进行处理

  • 参数分类

    • 形参 函数中定义参数

    • 实参 函数调用时传递的数据

# 函数的参数使用
# 加法计算
def add_fucn(a,b):
    # a和b是函数的参数 该参数在函数内定义叫做函数的形参
    # 参数本质就是一个变量,用来接收数据的
    # 在函数调用时,可以向函数内容传递具体的数据值,参数可以接收传递的值
    data = a+b
    print(data)
​
# 函数调用
# 可以将数据传递到函数内
add_fucn(15,22) # 15和22的数据叫做实参
add_fucn(28,31)

2-4 参数接收数据类型

  • 参数可以接收传递任意类型的数据

  • 自己定义函数时,要明确处理的数据类型

# 函数参数能接受的数据类型
data_str = 'itcast'
data_list = ['hadoop', 'spark']
data_tuple = ('hadoop', 'spark')
data_set = {'hadoop', 'spark'}
data_dict = {'id': 1}
​
​
def func(data):
    # 要求传递的数据是字典
    # 判断传递的数据是什么类型
    if type(data) == dict:
        # 参数的类型由传递的数据决定
        print(type(data), data)
        # 按照字典进行操作
        data.get('id')
​
​
# 函数的调用
func(data_str)
func(data_set)
func(data_list)
func(data_tuple)
func(data_dict)

2-5 函数的返回值

  • 在函数内使用关键字return,return只能有一个

  • 将函数内部的数据返回到调用处,在调用函数时,需要指定一个变量接收函数的返回值

  • 默认情况,没有指定返回值时,返回的一个None值

  • 返回任意类型数据

  • 返回多个值会放入元组中返回

# 函数的返回值
# 将一个函数内的数据返回外部使用
def add_func(a,b):
    # data是函数内的变量
    data = a+b
    print(data)
​
    # 将函数内的变量值返回到函数外部
    return data
​
# 在调用函数时,如果有返回值,需要在调用后定义变量接收返回值
return_data =  add_func(10,20)
​
def func(data):
    # 使用data变量值进行其他处理
    res = data *2
    print(res)
​
# 将上一个函数返回值传递到当前函数内使用
func(return_data)
# 返回多个值
def func():
​
    # 返回值可以是任意类型的数据
    # 返回值可以返回多个数据,返回多个值时,会将多个值放入元组中
    return 1,'张三',['asd','asd'],{'id':1,'name':'aaa'}
# 调用函数时接受返回值
return_data =  func()
print(return_data) 
​
# 定义多个接收变量,分别接收不同返回值
a,b,c,d = func()
print(a)
print(b)
print(c)
print(d)
​
def func2():
    data = 10+29
​
# 没有返回值时,res变量接收到的是空值
res = func2()
print(res)

2-6 函数的文档

函数文档就是对函数的描述

类似sql中的

create table tb(

id int comment '表的id'

)comment '用户表'

  • 格式

    • 函数文件在描述函数功能时,可以对接收的参数进行描述

def func():
    """
        信息描述
    """
# 函数文档
​
def add_func(a,b):
    '''
        加法计算功能
    :param a: 接收一个数据  类型 int
    :param b: 接收一个数据  类型 int
    :return: 没有返回值
    '''
    data = a+b
    print(data)
​
​
add_func(10,20) # ctrl+b跳转到函数定义处,可以查看文档描述信息

2-7 函数的嵌套调用

在一个函数内部调用其他函数

# 函数嵌套调用
def func1():
    print('func1')
​
def func2():
    print('func2')
​
func1()
func2()
​
def func3():
    # 函数3内使用函数1的功能
    func1()
    print('func3')
    # 函数3内执行函数2的功能
    func2()
​
func3()


# 函数的嵌套调用2
def func1():
    print('func1')
​
def func2():
    #调用func1
    func1()
    print('func2')
​
def func3(f):
    """
    :param f:  接收一个函数
    :return:
    """
    # 调用接收到函数
    f()
    print('func3')
​
func2()
​
print('----------')
# 函数名当成参数传递
func3(func1)

三、变量作用域

变量的作用域就是指在代码中变量能使用的位置

3-1 变量的引用

引用本质就是变量的赋值

data = '张三' # 数据直接赋值

data_new = data # 将一个变量值赋值给另一个变量 该过程就是变量的引用过程

def func(a):
    print(a)
data = 10
func(data) # a=data  参数a引用了data的数据
data2 = 20
func2(data2) 

在函数中可以通过参数引用外部数据

3-2 变量的分类

  • 全局变量

    • 在函数外定义,可以在代码中任意位置使用的变量

  • 局部变量

    • 在函数内定义,在函数内能使用

# 变量引用
data = 10 # 外部的变量值叫做全局变量
​
def func(data):
    # 参数传参引用方式 获取外部的变量值进行计算
    # 内部的变量值叫局部变量
    data = data+1
    print(data)
​
def func2():
    # data没有参数是,当成局部变量,但是此时局部变量data没有被定义会报错
    # 通过 global 声明外部变量值作为局部变量使用
    global data
    data = data+1
    print(data)
def func3():
    global data
    data =  data+1
    print(data)
​
​
def func4(data):
    data = data+1
    print(data)
​
func(data)
func4(data)
​
# func2()
# func3()

变量的作用域 指的变量能使用的范围

全局变量 可以代码的任意位置使用

局部变量 只在当前函数内有效

在函数内使用全局变量 有两种方式

第一种 当成参数传参 将全局变量传递给函数参数(函数内的局部变量)

  • 当成参数使用时 则相当于参数引用了全局变量的值,对参数进行操作,不影响全局全局变量的值

第二种 global声明 在函数内进行使用

  • 在函数内直接操作全局变量,会修改全局变量的值

# 多个函数中都要使用的变量可以定义成全局变量,通过global声明,就可在多个函数就可以共享全局数据
name_list = []
password_list = []
​
# 登录注册功能
def login():
    # 函数作用域
    # 通过四个空格,来确认函数所执行的逻辑从哪里开始
    # 列表,元组,集合,字典数据可以省略global声明
    global name_list
    global password_list
    for num in range(3):  # [0,3)  0,1,2
        name = input('请输入用户名:')
        password = input('请输入密码:')
        # 先判断用户名是否正确
        if name in name_list:
            # 在判断密码是否正确
            if password in password_list:
                print('登录成功')
                # 适应break关键,会结束循环,不再进行取值
                break
            else:
                print('密码不正确')
        else:
            print('用户名不正确')
​
def register():
    global name_list
    global password_list
    name = input('请输入注册的用户名:')
    password = input('请输入出注册的密码:')
    # 将用户的名字和密码添加到全局的数据列表
    name_list.append(name)
    password_list.append(password)
    
while 1==1:
    num = input('1-登录 2-注册 3-支付 4-下单 5-退出程序:')
    if num == '1':
        # 函数功能的调用
        login()  # 函数名()
    elif num == '2':
       register()
    elif num == '3':
        pass
    elif num == '4':
        pass
    else:
       break


data = 10
​
​
def func(a):
    """
        将字符串数据进行复制
    :param a:
    :return:
    """
    data_str = 'itcast'
    print(data_str * a)
​
​
def func2(data):
    """
        数据相加
    :param data:
    :return:
    """
​
    data = data+25
    print(data)
​
func2(data)
func(data)

四、函数参数详解

  • 形参

    • def func(形参)

    • 在函数定义时指定的参数

    • 本质形参可以理解为函数定义的内部变量,接收外部传递的数据

    • 缺省参数

      • 可以定义一个默认值,当形参没有传递数据时,可以使用默认值

    • 不定长参数

      • 接收任意个数的数据

      • *args 不能接受关键字传参的数据 接受位置参数的数据

      • **kwargs 接受关键字参数数据

  • 实参

    • func(实参)

    • 在函数调用时指定的参数数据

      • 位置参数

        • 在传递实参数据时,需要按照参数的位置进行数据的传递

        • 传递数据个数个形参个数一致

      • 关键字参数

        • 按照形参的名称传递数据

        • 形参=数据

def func(形参):
    
# 函数调用时传递的参数数据 实参
func(实参)
# 使用实参传递数据
# 定义一个学生列表保存多个学生数据
stu_list = []
def add_student(name,age,gender,address):
    """
        添加学生数据
    :param name: 姓名 str类型
    :param age: 年龄 int类型
    :param gender: 性别 str类型
    :param address: 地址 str类型
    :return:
    """
    # 往列表中添加学生数据
    stu_list.append({'name':name,'age':age,'gender':gender,'address':address})
​
​
# 实参传递数据的方式1  位置参数
# 按照参数的顺序和数量传递数据
add_student('张三',20,'男','北京') # 位置传参
print(stu_list)
​
# 方式2 关键字参数
# 使用参数的名称指定数据,和顺序无关
add_student(address='上海',age=22,name='李四',gender='男') # 使用参数名传递数据
print(stu_list)
​
# 混合使用 保证位置参数在前面 关键字参数在后面
# add_student(address='广州',20,'张三')
add_student('王五',20,gender='男',address='广州')
print(stu_list)
# 使用实参传递数据
# 定义一个学生列表保存多个学生数据
stu_list = []
def add_student(name,age,gender,address='北京'):
    """
        添加学生数据
    :param name: 姓名 str类型
    :param age: 年龄 int类型
    :param gender: 性别 str类型
    :param address: 地址 str类型  默认值北京  缺省参数,当没有传递数据是,使用默认的数据
    :return:
    """
    # 往列表中添加学生数据
    stu_list.append({'name':name,'age':age,'gender':gender,'address':address})
​
​
# 实参传递数据的方式1  位置参数
# 按照参数的顺序和数量传递数据
add_student('张三',20,'男','北京') # 位置传参
print(stu_list)
​
# 方式2 关键字参数
# 使用参数的名称指定数据,和顺序无关
add_student(address='上海',age=22,name='李四',gender='男') # 使用参数名传递数据
print(stu_list)
​
# 混合使用 保证位置参数在前面 关键字参数在后面
# add_student(address='广州',20,'张三')
add_student('王五',20,gender='男',address='广州')
print(stu_list)
​
add_student('赵六',20,gender='男')
print(stu_list)
# 使用形参接受数据
# 定义一个学生列表保存多个学生数据
stu_list = []
# 不确定学生数据到底有哪些数据内容,传递的数据个数无法确定
# 此时就可以使用不定长参数,接受任意个数的数据
def add_student(*args,**kwargs):
    # *args接受位置参数传递的多个数据,会将数据保存在元组中
    # **kwargs接受关键字参数传递多个数据,将数据保存在字典中
    # 往列表中添加学生数据
    if len(args) !=0:
        stu_list.append(args)
    if len(kwargs) !=0:
        stu_list.append(kwargs)
​
add_student('张三',20,'男')
print(stu_list)
​
add_student('李四',22,'男','北京')
print(stu_list)
​
add_student(name='张三',age=20)
print(stu_list)
​
add_student(name='张飞',age=20,address= '河北')
print(stu_list)

五、函数的数据传递

将外部数据传递到内部使用

1- global声明外部数据在函数内使用

2- 通过参数传递到函数内部

将函数内部数据传递外部使用

1-通过return返回函数内的数据

5-1 将函数外部数据传递到函数内部使用

  • 使用全局变量传递

    • 多数函数都要使用的数据,定义成全局变量

    • 全局要先定义,再在函数中使用

# 将外部数据传递到函数内部
# 方式1 定义全局变量
data_str = 'itcast' # 不可变类型数据 数据本身不可修改
data_list = ['hadoop','hive','spark','python'] # 可变类型  数据本身可修改
​
def func():
    # 在函数内进行修改全局变量数据
    # 需要使用global 声明
    global data_str  # 不可变类型
    data_str  = data_str+'python'
    print(data_str)
    
    # global data_list  数据是可变类型,省略global声明
    data_list.append('flink')
    print(data_list)
​
func()

  • 使用参数传递

    • 每个函数处理不同数据时,可以采用函数传参

# # 将外部数据传递到函数内部
# # 方式1 参数传递
data_str = 'itcast' # 不可变类型数据 数据本身不可修改
data_list = ['hadoop','hive','spark','python'] # 可变类型  数据本身可修改
​
# 在函数定义时,定义参数接收数据
def func(data):
    print(id(data))
​
​
# 函数调用时传递参数数据  相当于是变量赋值
func(data_str)  # data = data_str  # 当对data进行操作就是对data_str
print(id(data_str))
print('----------------------')
func(data_list) # data = data_list # 当对data进行操作就是对data_list
print(id(data_list))

5-2 函数内部数据传到函数外部使用

函数内定义了变量。该变量是局部变量

局部变量能在函数内进行计算修改,但是不能在函数外使用

# 局部变量数据传递到外部
​
def func():
    data = [1, 2, 3]
    data.append(4)
    print(data)
    # 需要将函数内的局部 变量传递外部使用
    # 借助返回值return 将内部的局部变量返回外部使用
    print(id(data))
    return data
​
​
# 调用函数时,定义变量接收函数返回值
data_res = func()  # 返回值 等价 data_res = data
print(data_res)
print(id(data_res))
​
​
# 可以将上一个函数的返回值传递到下一个函数
def func2(data2):
    # data2 = data_res
    print(data2)
    print(id(data2))
    data2.append(5)
​
# 将data_res 传递给func2
func2(data_res)
​
# data,data_res,data2代表的同一个数据
print(data_res)

标签:函数,Python,list,print,data,def,name
From: https://blog.csdn.net/weixin_65434097/article/details/139475131

相关文章

  • python基础学习day2
    python基础1、注释#单行注释'''三单引号注释'''"""三双引号多行注释"""2、数据类型一、整型(int)表示人的年龄、号码等age=18#age=int(18)print(id(age))print(type(age))print(age)二、浮点型(float)表示身高、体重、薪资salary=2.1#sala......
  • 关于python中的抽象类
    关于python中的抽象类本质是:不想让使用者实例化抽象类对于abstractstaticmethod在py3.3中弃用了。 一如何定义一个抽象类1常规做法先importABC继承ABC2用abstractmethod或abstractclassmethod装饰一个方法。二使用说明子类中必须要定义  在基类中被abstrac......
  • (手把手实现)Comsol如何调用MATLAB函数
    运行comsol仿真时,有时为了让某一个量按照自己设置的规则变化,可能需要用到自己编写的MATLAB函数。如何在comsol里调用MATLAB函数呢?解决措施:0️⃣确保comsol软件的“文件”——>首选项——>安全性——>允许外部MATLAB®函数为“是”。1️⃣成功在MATLAB里编写函数,有函数名称、输入......
  • Python深度学习实践:自动编码器在数据降维中的应用
    Python深度学习实践:自动编码器在数据降维中的应用1.背景介绍在现代数据科学和机器学习领域中,高维数据处理是一个常见的挑战。许多真实世界的数据集包含大量的特征,这些特征往往存在高度的冗余和噪声。高维数据不仅增加了计算复杂性,还容易导致维数灾难(curseofdimensio......
  • Python并发 :ThreadPoolExecutor
    concurrent.futures是Python中执行异步编程的重要工具,它提供了以下两个类: 1.ThreadPoolExecutorfromconcurrent.futuresimportThreadPoolExecutordeftest(num):print("Threads"num)#新建ThreadPoolExecutor对象并指定最大的线程数量withThreadPoolExecutor(......
  • 在 django 中使用窗口函数
    问题通过djangoORM实现如下写法的SQL语句:select*,row_number()over(partitionbyc1orderbyc2desc)asrnfrommy_table实现fromdjango.db.modelsimportF,Windowfromdjango.db.models.functionsimportRank,RowNumberMyModel.objects.annotate(rn=W......
  • python自动化测试框架,封装方法方式
    第一种:静态方法封装,接口调用入参定义一个(默认json),直接执行接口请求接口封装代码如下:classOrderTransactionService:@staticmethoddefgetComboProductList(body):url=http_host+'/service?serialize=7'headers={'Content-Type':'applic......
  • c函数堆栈
    使用反汇编分析代码1.无参数无返回值voidfun1(){}intmain(intargc,char*argv[]){ fun1(); return0;}反汇编分析2.有参无返回值代码voidfun2(intx,inty){ x+y;}intmain(intargc,char*argv[]){ fun2(1,2); return0;}返汇编分析3.无参......
  • Python结合文件名称将多个文件复制到不同路径下
      本文介绍基于Python语言,针对一个文件夹下的大量栅格遥感影像文件,基于其各自的文件名,分别创建指定名称的新文件夹,并将对应的栅格遥感影像文件复制到不同的新文件夹下的方法。  首先,我们来看一下本文需要实现的需求。现有一个文件夹,其中有大量.tif格式的栅格遥感影像文件,以及......
  • python 标准库 dataclasses 使用指南
    简单使用dataclasses可以用来快速的定义数据类,并能够简单明了的指明该类所具有的属性和类型,比如,要定义一个名为Person的类,常规的写法如下:classPerson:def__int__(self,id:int,first_name:str,last_name:str,eye_color:str):self.id=idse......