当前位置:
首页 > temp > python入门教程 >
-
python中的函数进阶
1.局部变量和全局变量
在函数外定义的不可变数据类型,在函数里面是可读不可写 在函数外定义的可变数据类型,在函数里面可读可操作不可修改 不可变类型传入函数,进行的操作不会影响到外面的变量 但是当我们声明一个变量为全局变量后,进行的操作会影响到函数外的变量
可变数据类型,传入和直接使用都会改变原本的数据 不可变数据类型 直接使用是可读不可写的 传入后的操作不会对函数外的变量造成影响 声明为全局变量后,可读可写,并且会对函数外的变量造成影响
# 1.在函数外定义的不可变数据类型 # 在函数里面是可读不可写 b = 1 def func(): print(b) # 可以运行成功 # b += 1 # 报错 # print(b) func()
# 2.不可变类型传入函数,进行的操作不会影响到外面的变量 # 但是参数可以传进来 b = 1 def func(b): b += 1 print(b) func(b) # 2 print(b) # 1
# 3.在函数外定义的可变数据类型 # 在函数里面可读可写 l1 = [1, 2, 3] def func(): l1.append(6) print(l1) func()
# # 4.global # # 只能在一个局部的情况下使用 # # 当一个函数外的不可变数据类型在函数内读和写并对原本的变量修改时,用global声明 b = 1 def func(): # global 声明一个变量为全局变量 global b b += 1 print(b) func() # 2 # 但是当我们声明一个变量为全局变量后,进行的操作会影响到函数外的变量 print(b) # 2
# 例子 my_money = 10000 def add(money: int): # 形参money """奖金加钱""" global my_money my_money += money print(f'当前余额{my_money}') def reduce(money: int): # 形参money """罚款减钱""" global my_money # 注意这里也要声明!!! my_money -= money print(f'当前余额{my_money}') add(1000) # 实参1000 add(2000) reduce(4000) reduce(666)
2.函数传参
# 1.形参与实参 # 形参和实参的个数需要一样 # 实参形参的位置顺序必须一样
def func(name, age): # 形参 print(f'我的名字是{name},我的年龄是{age}') my_name = '小明' my_age = 20 func(my_name, my_age) # 实参
# 2.关键字参数 # 关键字传参 关键字不需要加引号 # 优点:可以打乱参数的传入顺序 # 需要注意:关键字参数一定全都要写到最后面 # 不过一般是如果写关键字就都写关键字了
def func(money, name, age): # 形参 print(f'我的名字是{name},我的年龄是{age}\n' f'我的钱是{money}') my_name = '小明' my_age = 20 func(100, age=my_age, name=my_name) # 实参
# 3.默认参数 # 可写可不写 # 不写则使用默认参数 # 写了则使用传入的参数 # 默认参数一定要写在最后,否则报错
def func(name, age, money=1000, gender='男'): # 默认参数gender print(f'我的名字是{name},我的年龄是{age}\n' f'我的钱{money},我的性别{gender}') my_name = '小明' my_age = 20 func(my_name, my_age, 100, '女') # 实参
# 4.不定长参数 不定长关键字参数 # *args 也可以是*a *xxx # **kwargs 也可以是**a **xxx # key word args # 加了一个星号 * 不定长参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。 # 加了两个星号 ** 的参数会以字典的形式导入,存放已命名的变量参数。
def func(name, *args): print(args) # 是元组 print(*args) # 包本身 一般不会使用*args而使用args print(f'{name}菜里面的调料有{args}') func('小明', '番茄酱', '辣椒粉', '孜然粉') def func1(name, **kwargs): print(kwargs) # print(**kwargs) # 报错 print(f'{name}菜里面的调料有{kwargs}') func1('小明', t1='番茄酱', t2='辣椒粉', t3='孜然粉')
今日作业
# 定义一个模拟ATM机操作的场景 # 1)需要一个存钱和取钱的函数 # 2)设置全局默认资金1000 # 3)调用存钱函数,存放800元,并将操作后函数将余额打印出米(1000+800= 1800) # 4)调用取钱函数,取钱500元,并将操作后函数将余额打印出来(1800-500=1300) money = 1000 def add_money(money1: int): """存钱函数""" global money # 声明money为全局变量 money += money1 print(f'余额是{money}') def reduce_money(money2: int): global money # 注意这里也要声明!!! money -= money2 print(f'余额是{money}') add_money(800) # 调用存钱函数,存放800元 reduce_money(500) # 调用取钱函数,取钱500元
出处:https://www.cnblogs.com/qc2012/p/16964773.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数