【Python基础】9.基础知识点扩充

Shebang 的使用

  • #!被称为Shebang 或者 Sha-bang,是python的脚本解释程序
  • 通常在unix系统脚本中的第一行使用
  • 指明这个脚本文件的解释程序

使用 #!

  1. which 命令查询 python解释器
 which python3
  1. 在要执行的python脚本第一行加入Shebang
#! /usr/bin/python3
  1. 修改文件权限
chmod +x xxx.python
  1. 执行脚本文件
./xxx.py

变量进阶

变量的引用

  • 变量和数据都是保存在内存中的
  • 在python中,函数的参数传递返回值都是靠引用传递的

引用的概念

在python中

  • 变量数据 分开存储在内存中
  • 数据保存在划分内存的某一个有具体地址的位置
  • 变量中保存着数据具体地址
  • 变量记录数据的地址,叫做引用
  • 使用 id()方法可以查看变量保存数据所在的内存地址

给变量赋值的操作,本质上就是改变了变量的引用值

i = 1
# 内存中存储1,并将其地址赋值给i变量
a =# 将i的引用值赋值给 a, 此时,a记录了1的地址

函数的实参和返回值的传递

  • 在python中,函数的实参和返回值都是靠引用来传递的
def test(num):
	print (%d 在内存中的地址是 %x’ %(num,id(num))
	result = 100
	print (‘返回值 %d 在内存中的地址是 %x’%(result,id(result))
	return result
a = 10
print (‘调用前,参数a的地址是 %x' %id(a))
# 调用函数时,本质上是传递实际参数的地址,而不是实际参数的值
result = test(a)
# 如果test(a)不定义变量,则不会拿到返回值,
print (‘调用后,参数a的地址是 %x' %id(a))
print (‘调用后,返回值result的地址是 %x' %id(result))

可变和不可变类型

不可变类型

内存中的数据不允许被修改

  • 数字类型
    1. int
    2. float
    3. bool
    4. complex
    5. long (python2.x)
  • 元组
  • 字符串

可变类型

内存中的数据允许被修改

  • 列表 list
  • 字典 dict
    Tips:
  1. 可变类型的数据变化,是通过方法来实现的
  2. 如果给一个可变类型的变量,赋值了一个新的数据,引用会随之发生改变
    • 变量不再对之前的数据引用
    • 变量改为对新赋值的数据引用
arr = [1,2,3]
id(a) # *****38312
arr.append(999)
print(a) # [1,2,3,999]
id(a) # *****38312
a.remove(2)
id(a) # *****38312
a.clear()
id(a) # *****38312
a = []
id(a) #*****09832 

字典的key只能是不可变类型

哈希 hash

python 中有一个内置函数 hash(o)

  • 接收一个 不可变类型 作为参数
  • 返回的结果是一个整数

hash算法用于提起数据的特征码(指纹)

  • 相同的内容得到相同的结果
  • 不同的内容得到不同的结果

hash算法在python中的应用

在python中,设置字典的 <k,v>时,会首先对key进行hash,决定如何在内存中保存字典的数据,方便对字典的增删改查。

  • 所以字典的key必须是不可变的
  • 字典的value可以是任意的

局部变量和全局变量

  • 局部变量定义在函数内部,只能在函数内部使用
  • 全局变量定义在函数外部,被所有可访问的函数共享使用

局部变量

  • 局部变量在函数内部定义,只能在函数内部使用
  • 局部变量在代码执行完毕后,会被系统回收
  • 不同的函数,可以定义相同名称的局部变量,互不影响

局部变量的作用

  • 在函数内部使用时,临时保存
def demo1():
	a = 10 # 定义一个局部变量
	print(%d’ %num)
demo1()
# print(‘%d’ %num) #会报错 name ‘num’ is not define 

局部变量的生命周期

  • 生命周期就是被创建到被回收的过程
  • 局部变量在函数被执行时,才会被创建
  • 函数执行结束后,局部变量被系统回收
  • 局部变量在其生命周期内,可以临时存储函数内部需要使用的数据

全局变量

  • 全局变量在函数外部定义,所有的函数都可以使用这个变量
num = 10 
def demo1():
	print(num)
def demo2():
	print(num)
demo1()
demo2()

注意:
函数执行过程中,需要处理变量时:

  1. 首先查找函数内部是否存在指定名称的局部变量,如果有,直接使用
  2. 如果没有,查找程序外部指定名称的全局变量,如果有,直接使用
  3. 未找到时报错

函数不能直接修改全局变量的引用

  • 在函数内部,使用全局变量的引用获取对应的数据
  • 不允许直接修改全局变量的引用,使用赋值语句修改全局变量的值
  • 如果直接修改全局变量的引用,会在函数内部,定义一个局部变量
num = 10 
def demo1():
	# 希望修改python变量的值
	num = 99
	print(num) 
def demo2():
	print(num)
demo1() # 输出 99
demo2() # 输出 10

使用global修改全局变量的值

  • global 关键字会告诉解释器,后面的变量是一个全局变量,再使用赋值语句时,就不会创建局部变量
num = 10 
def demo1():
	# 希望修改python变量的值
	global num 
	num = 99
	print(num) 
def demo2():
	print(num)
demo1() # 输出 99
demo2() # 输出 99

定义全局变量的位置

为了方便函数使用全局变量,需要将全局变量定义在模块上方,避免出现name ‘xxx’ is not define

代码结构示意图

Shebang

import 模块

全局变量

函数定义

执行代码

全局变量命名的建议

  • 为了避免全局变量和局部变量出现混淆,在定义全局变量时,建议增加g_或者gl_的前缀
  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值