python_练习_函数_判断全局变量和局部变量 匿名函数实现0和非0项数组排序 匿名函数实现奇数偶数数组排序

计算下列返回值,并判断变量的类型

  • 此题中 allMoney是局部变量
def save_money(money):
    """ 存钱 """
    allMoney = 100              # 局部变量
    print("存钱前:", allMoney)   # 100
    allMoney += money
    print("存钱后:", allMoney)   # 150

def view_money():
    """查询金额"""
    allMoney = 500              # 局部变量
    print("查询金额:", allMoney) # 500

if __name__ == '__main__':
    save_money(50)
    view_money()
# 存钱前: 100
# 存钱后: 150
# 查询金额: 500
  • 此题中allMoney是全局变量
# 定义全局变量
allMoney = 100

def save_money(money):
    """存钱"""
    global allMoney               # 全局变量
    print("存钱前:", allMoney)     # 100
    allMoney += money
    print("存钱后:", allMoney)     # 150

def view_money():                 # 此函数没有声明全局变量
    """查询金额"""
    print("查询金额:", allMoney)    # 150

if __name__ == '__main__':
    save_money(50)
    view_money()
  • 不使用global声明全局变量时不能修改全局变量?
    Q: 为什么operator不需要声明为全局变量呢?
    A: 因为 operator 是可变数据类型,不需要声明,其所有修改都在同一个内存
# 定义全局变量
allMoney = 100
operator = []

def save_money(money):
    """存钱"""
    global allMoney
    print("存钱前:", allMoney, operator)   # 100 []
    allMoney += money
    # Q: 为什么operator不需要声明为全局变量呢?
    # A: 因为 operator 是可变数据类型,不需要声明,其所有修改都在同一个内存地址空间中完成
    operator.append('存钱操作')
    print("存钱后:", allMoney, operator)   # 150 ['存钱操作']

def view_money():
    """查询金额"""
    operator.append("查询金额操作")
    print("查询金融:", allMoney, operator)  # 150 ['存钱操作', '查询金额操作']

if __name__ == '__main__':
    save_money(50)
    view_money()

0和非0项数组排序

在这里插入图片描述

"""
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
        输入: 数组的记录;0 7 0 2
        输出: 调整后数组的内容; 7 2 0 0
思路如下:
0 7 0 2
1 0 1 0 - rule: ( 1 if num == 0 else 0 )
0 0 1 1
7 2 0 0 - after sort
"""
# 方式一:
nums = [0, 7, 0, 2]
result = sorted(nums, key= lambda num: 1 if num == 0 else 0)
print(result)       # [7, 2, 0, 0]
# 方式二:
nums = [0, 7, 0, 2]
nums.sort(key=lambda num : 1 if num == 0 else 0)
print(nums)         # [7, 2, 0, 0]

奇数偶数数组排序

# 需求: 将所有的偶数排前面,所有的奇数排后面
# 思路: 偶数为0,奇数为1
# 0 7 0 2
# 0 1 0 0 - before sort
# 0 0 0 1 - rule: 0 if num%2 == 0 else 1
# 0 0 2 7 - after sort
# 方式一:
nums = [0, 7, 0, 2]
result = sorted(nums, key=lambda num : 0 if num%2==0 else 1)
print(result)       # [0, 0, 2, 7]
# 方式二:
nums = [0, 7, 0, 2]
nums.sort(key=lambda num : 0 if num%2 == 0 else 1)
print(nums)       # [0, 0, 2, 7]
# 方式三: reverse=True表示从大到小排序
nums = [0, 7, 0, 2]
nums.sort(key=lambda num : 0 if num%2 == 0 else 1, reverse=True)
print(nums)      # [7, 0, 0, 2]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值