当前位置: 首页 > news >正文

python 第四章 函数 (pycharm) (2)

一 :变量作用域

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

变量的引用

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

变量的分类

  • 全局变量

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

  • 局部变量

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

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

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

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

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

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

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

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

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

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

# 多个函数中都要使用的变量可以定义成全局变量,通过global声明,就可在多个函数就可以共享全局数据
name_list = []
password_list = []# 登录注册功能
def login():# 函数作用域# 通过四个空格,来确认函数所执行的逻辑从哪里开始# 列表,元组,集合,字典数据可以省略global声明global name_listglobal password_listfor num in range(3):  # [0,3)  0,1,2name = input('请输入用户名:')password = input('请输入密码:')# 先判断用户名是否正确if name in name_list:# 在判断密码是否正确if password in password_list:print('登录成功')# 适应break关键,会结束循环,不再进行取值breakelse:print('密码不正确')else:print('用户名不正确')def register():global name_listglobal password_listname = 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':passelif num == '4':passelse:break

data = 10def func(a):"""将字符串数据进行复制:param a::return:"""data_str = 'itcast'print(data_str * a)def func2(data):"""数据相加:param data::return:"""data = data+25print(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 定义全局变量
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))

函数内部数据传到函数外部使用

# 局部变量数据传递到外部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_resprint(data2)print(id(data2))data2.append(5)# 将data_res 传递给func2
func2(data_res)# data,data_res,data2代表的同一个数据
print(data_res)

相关文章:

  • 二分答案思想下的二进制问题
  • Python爬虫技术深度解析与实战案例
  • 基于51单片机简易温度计
  • 商品发布功能
  • 在VS Code中进行Java的单元测试
  • 【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩
  • 自由应用大本营?开源免费的Android应用商店:F-Droid Client
  • UniApp 2.0可视化开发工具:引领前端开发新纪元
  • 【前端】面试八股文——BFC
  • ubuntu-24.04系统静态Mac和IP配置
  • 【MySQL精通之路】MySQL-环境变量
  • 鹏哥C语言复习——调试
  • 从零开始搭建Springboot项目脚手架4:保存操作日志
  • 基于飞书机器人跨账号消息提醒
  • redis查看一个key占用了多少内存
  • [译] React v16.8: 含有Hooks的版本
  • 5、React组件事件详解
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • input实现文字超出省略号功能
  • iOS | NSProxy
  • JavaScript新鲜事·第5期
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Netty 4.1 源代码学习:线程模型
  • php的插入排序,通过双层for循环
  • XForms - 更强大的Form
  • Yeoman_Bower_Grunt
  • 从零开始学习部署
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 区块链将重新定义世界
  • 深度学习在携程攻略社区的应用
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 原生 js 实现移动端 Touch 滑动反弹
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • Spring第一个helloWorld
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​iOS实时查看App运行日志
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • !$boo在php中什么意思,php前戏
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (js)循环条件满足时终止循环
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (黑马点评)二、短信登录功能实现
  • (十一)图像的罗伯特梯度锐化
  • (转)创业家杂志:UCWEB天使第一步
  • (自用)网络编程
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .config、Kconfig、***_defconfig之间的关系和工作原理