python3 md5加密
1、首先是获取要加密的一段字符串
new_str = str[0:len(str) - 1]
2、去创建md5对象
m = hashlib.md5()
3、调用对象中的方法update,生成加密字符串
m.update(new_temp)
4、获取加密后的字符串
sign = m.hexdigest()
import hashlib
def genearteMD5(str):
# 创建md5对象
hl = hashlib.md5()
# Tips
# 此处必须声明encode
# 否则报错为:hl.update(str) Unicode-objects must be encoded before hashing
hl.update(str.encode(encoding='utf-8'))
print('MD5加密前为 :' + str)
print('MD5加密后为 :' + hl.hexdigest())
======================================================================================
python3之后没了raw_input()方法
函数的return语句只能返回一个值,可以是任意类型。返回一个tuple类型,间接达到返回多个值。
def test():
a="aa"
b=12
return a,b
print(test())
=====================================================================================
if __name__ == "__main__"
通俗的理解__name__ == '__main__'
:假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明')
;在你自己眼中,你是你自己(__name__ == '__main__')
。if __name__ == '__main__'
的意思是:当.py文件被直接运行时,if __name__ == '__main__'
之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'
之下的代码块不被运行。__name__
是内置变量,可用于表示当前模块的名字。我们直接运行一个.py文件(模块)
=======================================================================================
以下等号内是我自己的一些理解:
python3有7中基本数据类型,每种数据类型都可以看作类对象;5种不可变类型(int/float/bool/String/Tuple)和2种可变类型(list/dict);
# int是不可变类型,a+=对变量a进行了变化处理
a = 10 # int不可变类型,a是变量,把int值10的地址赋给a
print(id(a)) # 打印变量a存储的int类型的地址
a += 20 # 这里,新建了一个int类型30,并且把30的地址赋给变量a。
# 而不是把10所在地址空间的int值10变为30
print(id(a)) # 打印变量a新存储的内存地址
print(id(10)) # 这个地址和第一个打印的地址相同,说明int类型是不可变的
print(id(30)) # 这个内存地址和第二个打印的地址相同,说明是新建了一个int对象30
========================================================================================
值传递和引用传递
python函数参数为不可变类型时,为值传递;为可变类型时为引用传递。
引用传递传递的是内存地址,修改后会改变内存地址对应储存的值。
====================================================
python参数传递既不是值传递也不是参数传递
def change(val):
val.append(100)
val = ['T', 'Z', 'Y']
nums = [0, 1]
change(nums)
print(nums) # [0,1,100]
========================================================================================
python中的变量是没有类型的,我们可以把它看作一个(*void)指针,变量是可以指示任何对象的,而对象才是有类型的,python九种基本类型,int/float/bool/complex/str/list/tuple/dict/集合
Python中函数参数的传递是传递的变量的值,即就是变量所指向的对象的地址。
一般的,我们有下面的规律:
1. 不可变对象作为函数参数,相当于C系语言的值传递。
2. 可变对象作为函数参数,相当于C系语言的引用传递。
nums = (1, 2, 3)
type(nums) #输出:tuple
id(nums) #输出:59179256
nums = [1, 2, 3]
type(nums) #输出:list
id(nums) #输出:59094960
========================================================================================
python类型:数字类型、序列、键值对,字典的value可以是所有类型
不可变类型:一旦开辟内存空间存储数据,数据就不能修改。只要数据”更改“就会重新开辟内存空间,这里的数据“更改”只是一种读法,不会改变已存在内存空间中的不可变类型数据。不可变类型数据只要存在就会开辟内存空间,不必去给变量赋值就会开辟内存空间:
print(id(3))
开辟内存空间存储可变类型数据,list和dict,进行增删改查可以不用更改地址。可以自己写代码验证...
def test2(list):
print(list,id(list))
list.append(19)
print(id(list))
# return list
list=["s","zhi",3,4]
print(id(list))
test2(list)
print(list,id(list))
print("==================")
def test2(tuple):
print(tuple, id(tuple))
tuple=(11,22)
print(tuple,id(tuple))
# return list
tuple=(1,2,3,4)
print(id(tuple))
test2(tuple)
print(tuple,id(tuple))
print("=======================")
# ==============
def change(val):
val.append(100)
val = ['T', 'Z', 'Y']
nums = [0, 1]
change(nums)
print(nums)
# ***************************************
a=[1,2,3]
b=a
b[0]=4
print(a[0])
def func(list):
list[0]=5
list=[1,2,3,4]
func(list)
print(list)
========================================================================================
局部变量和全局变量
局部:
1.局部变量就是写在 函数内部的变量
2.局部变量不能在其他的范围内使用
3.局部变量函数结束,自动被回收
4.不同范围的局部变量,可以叫一样的名字,但是互不干扰
全局:
顶行定义的都是全局,所有的函数都可以使用
总结:
1.全局变量不能直接在局部修改,如果出现赋值语句,会被认为是在新建一个局部的变量,如果强行修改会报错
2.变量的访问的顺序:先找函数内部====>再找全局====>再没有就报错
3.需要修改全局:用 global 变量
4.全局变量的位置
导包
全局
定义函数
调用函数
5.建议命名:g_变量名,gl_变量名
***********************************************************************************************************************************