一、上节课的重点回顾:

1、类名加括号其实就是执行类的__init__方法:

2、int

  a.创建方式

  n1 = 123  #根据int类创建了一个对象

  n2 = int(123)  #根据int类创建一个对象,类的实例化就是对象

  b.int内部优化

  1、n1和n2的内存地址相同

    n1 = 123

    n2 = n1

  2、按理说n1和n2的内存地址应该不同,这是由于python的内部机制的原因,

    在-5~257以内的数,按2的方式写,都是指向同一个内存

    n1 = 123

    n2 = 123

    除此之外的数,n1和n2的内存地址是不同的,但是python源码可以改取值范围

    n1 = 123123

    n2 = 123123

  3、id查看对象的内存地址

    n1 = 123

    i1 = id(n1)

name = "李露"
for i in name:
print(i) #循环打印每个汉字而不是字节
bytes_list = bytes(i, encoding='utf-8') #将汉字转成字节,编码是utf-8
print(bytes_list)
for b in bytes_list:
hex 可以 十进制转16进制   二进制转16进制    结果都是字符串
>>> hex(0b10)
'0x2'
>>> hex(10)
'0xa'
bin 可以十进制转2进制 16进制转2进制 结果都是字符串
>>> bin(10)
'0b1010'
>>> bin(0x2)
'0b10’
int 可以16进制转换十进制 2进制转换十进制
>>> int(0xe)
14
>>> int(0b100)
4

python进制转换

fromkeys(seq,value=None) 解释:     
默认不写value的话,所有的值为None
n = dict.fromkeys(['k1', 'k2'], []) #默认逗号后面不给的话,key对应的value都是None n['k1'].append(2) #我们修改逗号后面的空列表元素 打印 所有key的value也会修改
print(n) n['k1'] = 3 # 而单独修改key的value的话,只有 这个key的value改了,而其他的key对应的value都不变
print(n) n = dict.fromkeys() #默认逗号后面不给的话,key对应的value都是None
print(n)

二、集合set:集合是一个无序且不重复的元素集合

s1={1,2,3,1}                #定义一个set s1 如果s1={}为空则默认定义一个字典
s2=set([2,5,6]) #定义一个set s2
print(s1) #s1={1,2,3} 自动去除重复的元素 s1.add(5) #s1={1,2,3,5} 添加一个元素
print(s1) s3=s1.difference(s2) #返回一个s1中存在而不存在于s2的字典s3,s3={1,3},而s1并没有改变
print(s3) s1.difference_update(s2) #s1跟新成上面的s3 s1={1,3}
s1.discard(1) #删除元素1,不存在的话不报错 s1={3}
print(s1)
s1.remove(3) #删除元素3,不存在的话报错 s1={}
print(s1)
s1.update([11,2,3]) #跟新s1中的元素,其实是添加 s1={11,2,3}
print(s1)
k=s1.pop() #删除一个元素,并将删除的元素返回给一个变量,无序的,所以并不知道删除谁                   
s1={1,2,3,4}          #这里重新定义了集合s1,s2
s2={3,4,5,6}
r1=s1.intersection(s2) #取交集,并将结果返回给一个新的集合 r1={3,4}
print(r1)
print(s1)
s1.intersection_update(s2) #取交集,并将s1更新为取交集后的结果 s1={3,4}
print(s1) k1=s1.issubset(s2) #s1是否是s2的的子序列是的话返回True,否则False 这里k1=true
print(k1)
k2=s1.issuperset(s2) #s1是否是s2的父序列 k2=False k3=s2.isdisjoint(s1) #s1,s2,是否有交集,有的话返回False,没有的话返回True
print(k3)
s1.update([1,2]) #s1={1,2,3,4}
r3=s1.union(s2) #取并集将结果返回给r3 r3={1,2,3,4,5,6}
print(r3)
r2=s1.symmetric_difference(s2) #r2=s1并s2-s1交s2 r2={1,2,5,6}
print(r2)
s1.symmetric_difference_update(s2) #s1更新为 s1并s2 - s1交s2 s1={1,2,5,6}
print(s1)
class set(object):
"""
set() -> new empty set object
set(iterable) -> new set object Build an unordered collection of unique elements.
"""
def add(self, *args, **kwargs): # real signature unknown
"""
Add an element to a set,添加元素 This has no effect if the element is already present.
"""
pass def clear(self, *args, **kwargs): # real signature unknown
""" Remove all elements from this set. 清楚内容"""
pass def copy(self, *args, **kwargs): # real signature unknown
""" Return a shallow copy of a set. 浅拷贝 """
pass def difference(self, *args, **kwargs): # real signature unknown
"""
Return the difference of two or more sets as a new set. A中存在,B中不存在 (i.e. all elements that are in this set but not the others.)
"""
pass def difference_update(self, *args, **kwargs): # real signature unknown
""" Remove all elements of another set from this set. 从当前集合中删除和B中相同的元素"""
pass def discard(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set if it is a member. If the element is not a member, do nothing. 移除指定元素,不存在不保错
"""
pass def intersection(self, *args, **kwargs): # real signature unknown
"""
Return the intersection of two sets as a new set. 交集 (i.e. all elements that are in both sets.)
"""
pass def intersection_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the intersection of itself and another. 取交集并更更新到A中 """
pass def isdisjoint(self, *args, **kwargs): # real signature unknown
""" Return True if two sets have a null intersection. 如果没有交集,返回True,否则返回False"""
pass def issubset(self, *args, **kwargs): # real signature unknown
""" Report whether another set contains this set. 是否是子序列"""
pass def issuperset(self, *args, **kwargs): # real signature unknown
""" Report whether this set contains another set. 是否是父序列"""
pass def pop(self, *args, **kwargs): # real signature unknown
"""
Remove and return an arbitrary set element.
Raises KeyError if the set is empty. 移除元素
"""
pass def remove(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError. 移除指定元素,不存在保错
"""
pass def symmetric_difference(self, *args, **kwargs): # real signature unknown
"""
Return the symmetric difference of two sets as a new set. 对称交集 (i.e. all elements that are in exactly one of the sets.)
"""
pass def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the symmetric difference of itself and another. 对称交集,并更新到a中 """
pass def union(self, *args, **kwargs): # real signature unknown
"""
Return the union of sets as a new set. 并集 (i.e. all elements that are in either set.)
"""
pass def update(self, *args, **kwargs): # real signature unknown
""" Update a set with the union of itself and others. 更新 """
pass

set 集合class---官方文档

#!/usr/bin/env python
# _*_ coding:utf-8 _*_ a={1:2,4:5}
b=set(a) b.add(111111)
b.clear()
print(b) n = {11,22,33}
b = {22,66}
c = {11} # n中有的b中没有的赋值给新的变量 打印
new_n = n.difference(b)
print(new_n) #n中有的 b中没有的 更新到n
# n.difference_update(b)
# print(n) # 将迭代的序列加入
n.update("al")
n.update([1,3,4])
print(n) #n存在的b不存在的 b存在n不存在的 组合一起输出
ret=n.symmetric_difference(b)
ret2 = n.symmetric_difference({11,22,33})
print(ret)
print("=========")
# n存在的b不存在的 b存在n不存在的 组合一起 更新到前面的集合
n.symmetric_difference_update(b)
print(n) # 是否是子集 不是返回false 是的话True
ret = n.issubset(c) # n是不是c的子
print(ret)
ret1 = c.issubset(n) # c是不是n的子
print(ret1)
ret2 = n.issuperset(c) # n是不是c的父
print(ret2) # pop discard remove 三个删除的区别 #pop 删除同时可以获取到该值
ret = n.pop() #由于集合是无序的,所以pop删除也是无序的
print(ret)
# discard 删除集合元素,如果元素不存在 返回False 不报错
n.discard(11)
print(n)
#remove 删除集合元素 如果元素不存在 报错
#n.remove(99) z = {11,22,33}
p = {44} z.intersection(p) #取交集并更新到z中
print(z) 集合 练习 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'liujianzuo' old_dict = {
"#1":11,
"#2":11,
"#3":11,
}
new_dict = {
"#1":33,
"#4":22,
"#7":100,
}
# b = set(old_dict.keys())
# print(b)
s1 =set()
s2 =set()
for i in old_dict.keys():
s1.add(i)
for n in new_dict:
s2.add(n)
print(s1,s2)
ret1 = s1.difference(s2)
print("for deling :",ret1)
ret2 = s2.difference(s1)
print("for adding:",ret2)
# ret=s1.intersection(s2)
# print(ret)
for i in s1 :
del old_dict[i] for i in s2:
old_dict[i]=new_dict[i] print(old_dict)

set集合练习

a = set([1,2,3,4])
b = set([3,4,5,6])
a&b:求两个集合的交集--a.intersection(b)
a|b--求两个集合的并集--a.union(b)
a - b--求两个集合的差集--a.difference(b)
a ^ b--求两个集合的对称差集--a.symmetric_difference(b)
a.issubset(b)--a是b的子集
a.isuperset(b)--a是否包含b
交集

>>> a.append(10)
>>> set(a)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b =range(6)
>>> a = set(a)
>>> b =set(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b
set([0, 1, 2, 3, 4, 5])
取交集
>>> a & b
set([0, 1, 2, 3, 4, 5])
交集应用场景:比如两个班级都叫alex或者两个班级都是100分的 或者两个班级中都大于多少分的 并集应用
>>> a | b
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 差集
>>> a - b
set([8, 9, 10, 6, 7]) 对称差集 >>> a - b
set([8, 9, 10, 6, 7])
把两个里面对方都没有的打印出来 A b 差集
a ^ b set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b
set([0, 1, 2, 3, 4, 5, 12])
>>> a ^ b
set([6, 7, 8, 9, 10, 11, 12])
a.add集合中添加一项,同样的去重不同样的增加
>>> a.add(0)
>>> a.add(22)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22]) a.update集合添加多项
>>> a.update([23,34,35])
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 34, 35, 22, 23]) 添加一个集合到另一个集合
>>> a.update(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 34, 35, 22, 23])
#b.issubset(a) a.issuperset(b) 测试b中的每一个元素都在a中
>>> len(a) >>> len(b) >>> b in a
False
>>> a in a
False
>>> import tab
>>> b.issubset(a) #测试b中的每一个元素都在a中
True
>>> a.issubset(b)
False
>>> 3 in a
True
>>> b.issuperset(a)
False
>>> a.issuperset(b) #测试b中的每个元素都在a中
True

set集合练习

练习:寻找两个集合的差异

# 数据库中原有
old_dict = {
"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },
"#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
} # cmdb 新汇报的数据
new_dict = {
"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 },
"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
"#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 }
}
#!/usr/bin/env python
# _*_ coding:utf-8 _*_ # 数据库中原有
old_dict = {
"#1":{ 'hostname':1, 'cpu_count': 2, 'mem_capicity': 80 },
"#2":{ 'hostname':1, 'cpu_count': 2, 'mem_capicity': 80 },
"#3":{ 'hostname':1, 'cpu_count': 2, 'mem_capicity': 80 }
} # cmdb 新汇报的数据
new_dict = {
"#1":{ 'hostname':1, 'cpu_count': 2, 'mem_capicity': 800 },
"#3":{ 'hostname':1, 'cpu_count': 2, 'mem_capicity': 80 },
"#4":{ 'hostname':2, 'cpu_count': 2, 'mem_capicity': 80 }
}
# b = set(old_dict.keys())
# print(b)
s1 =set()
s2 =set()
for i in old_dict.keys():
s1.add(i)
for n in new_dict:
s2.add(n) new_jiaoji = s1.intersection(s2)
print(new_jiaoji)
for j in new_jiaoji:
if old_dict[j] != new_dict[j]:
print("need updating: { '%s': %s}"%(j,new_dict[j])) print(s1,s2)
ret1 = s1.difference(s2)
print("for deling :",ret1)
ret2 = s2.difference(s1)
print("for adding:",ret2)
# ret=s1.intersection(s2)
# print(ret)
for i in s1 :
del old_dict[i] for i in s2:
old_dict[i]=new_dict[i] print(old_dict)

set集合练习题答案 寻找差异

三、三元运算

python的三元运算:

  变量名 = 变量1 if 条件判断成立 else 变量2

    解释:条件成立  变量名值为变量1  否则为变量2

a=1
b=2
if a<b: #一般条件语句的写法
k=a
else:
k=b c=a if a<b else b    #三目运算符的写法

四、深浅拷贝

拷贝意味着对数据重新复制一份,对于拷贝有两种深拷贝,浅拷贝两种拷贝,不同的拷贝有不同的效果。拷贝操作对于基本数据结构需要分两类进行考虑,一类是字符串和数字,另一类是列表、字典等。如果要进行拷贝的操作话,要import copy。

1、数字和字符串  

  对于数字和字符串而言,深拷贝,浅拷贝没有什么区别,因为对于数字数字和字符串一旦创建便不能被修改,假如对于字符串进行替代操作,只会在内存中重新生产一个字符串,而对于原字符串,并没有改变,基于这点,深拷贝和浅拷贝对于数字和字符串没有什么区别,下面从代码里面说明这一点

import copy
s='abc'
print(s.replace('c','222')) # 打印出 ab222
print(s) # s='abc' s并没有被修改
s1=copy.deepcopy(s)
s2=copy.copy(s) #可以看出下面的值和地址都一样,所以对于字符串和数字,深浅拷贝不一样,数字和字符串一样就不演示了,大家可以去试一下
print(s,id(s2)) # abc 1995006649768
print(s1,id(s2)) # abc 1995006649768
print(s2,id(s2)) # abc 1995006649768

2、字典、列表等数据结构

对于字典、列表等数据结构,深拷贝和浅拷贝有区别,从字面上来说,可以看出深拷贝可以完全拷贝,浅拷贝则没有完全拷贝,下面先从内存地址分别来说明,假设 n1 = {"k1""wu""k2"123"k3": ["alex"456]}

        浅拷贝在内存中只额外创建第一层数据                 深拷贝在内存中将所有的数据重新创建一

           

2.1、赋值:

赋值,只是创建一个变量,该变量指向原来内存地址,如:

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

n2 = n1

2.2浅拷贝

浅拷贝,在内存中只额外创建第一层数据

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

n3 = copy.copy(n1)

2.3、深拷贝

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)  最底层数据要满足第一条赋值变量的条件

import copy

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

n4 = copy.deepcopy(n1)

五、函数:函数传参,传的是引用

5.1 函数的定义:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。 注意是返回给函数调用者

5.2函数的参数:函数为什么要设置参数?

5.2.1无参函数

def CPU报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 def 硬盘报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 def 内存报警邮件()
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 while True: if cpu利用率 > 90%:
CPU报警邮件() if 硬盘使用空间 > 90%:
硬盘报警邮件() if 内存占用 > 80%:
内存报警邮件()

无参数实现

5.2.2有参函数

def 发送邮件(邮件内容)

    #发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接 while True: if cpu利用率 > 90%:
发送邮件("CPU报警了。") if 硬盘使用空间 > 90%:
发送邮件("硬盘报警了。") if 内存占用 > 80%:
发送邮件("内存报警了。")

有参数实现

5.3函数参数的种类

  • 普通参数
  • 默认参数
  • 动态参数

普通参数

# ######### 定义函数 ######### 

# name 叫做函数func的形式参数,简称:形参
def func(name):
print name # ######### 执行函数 #########
# 'wupeiqi' 叫做函数func的实际参数,简称:实参
func('wupeiqi')

普通参数

默认参数

def func(name, age = 18):

    print "%s:%s" %(name,age)

# 指定参数
func('wupeiqi', 19)
# 使用默认参数
func('alex') 注:默认参数需要放在参数列表最后

默认参数

动态参数:

动态参数1:*args 是指可以传入多个参数用逗号隔开

def func(*args):

    print args

# 执行方式一
func(11,33,4,4454,5) # 执行方式二
li = [11,2,2,3,3,4,54]
func(*li)

动态参数1

如果 元素参数是一个列表呢?我们把列表传入输出的一个元素是列表,但是我们想把列表的每个元素当一个参数。调用的时候加*

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
a=[1,3,4]
def fuc(*args):
#print(args)
return args
ret=fuc(a)
print(ret) 结果:
C:\Python35\python3.exe E:/py_test/s4/s5.py
([1, 3, 4],) #!/usr/bin/env python
# _*_ coding:utf-8 _*_ a=[1,3,4]
def fuc(*args):
#print(args)
return args
ret=fuc(*a)
print(ret)
C:\Python35\python3.exe E:/py_test/s4/s5.py
(1, 3, 4)

动态参数2:**kwargs  意指可以传入多个元素以key= value  key的格式是按照变量名的命名规范为标准的

def func(**kwargs):

    print args

# 执行方式一
func(name='wupeiqi',age=18) # 执行方式二
li = {'name':'wupeiqi', age:18, 'gender':'male'}
func(**li)

动态参数2 :**kwargs

如果 元素参数是一个字典呢?我们把列表传入输出的一个元素是字典,但是我们想把字典的每个key value当一个参数。调用的时候加** 只加*是key

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'liujianzuo'
a={"k1":2,"k2":3}
def fuc(**args):
#print(args)
return args
ret=fuc(**a)
print(ret) C:\Python35\python3.exe E:/py_test/s4/s5.py
{'k1': 2, 'k2': 3}

动态参数3:*args **kwargs

def func(*args, **kwargs):

    print (args)
print (kwargs)
#!/usr/bin/env python
# _*_ coding:utf-8 _*_ a={"k1":2,"k2":3}
b=[1,2,3]
def fuc(*args,**kwargs):
#print(args)
return args,kwargs
ret=fuc(*b,**a)
print(ret) C:\Python35\python3.exe E:/py_test/s4/s5.py
((1, 2, 3), {'k2': 3, 'k1': 2})

升级篇:邮件发送实例:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_ def email(p,text,subject):
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr ret = True
try: msg = MIMEText(text, 'plain', 'utf-8')
msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])
msg['To'] = formataddr(["走人",'424662508@qq.com'])
msg['Subject'] = subject server = smtplib.SMTP("smtp.126.com", 25)
server.login("wptawy@126.com", "WW.3945.59")
server.sendmail('wptawy@126.com', [p,], msg.as_string())
server.quit()
except:
ret = False
return ret r1=email("1223995142@qq.com","python test email +===","subject==pyhon")
if r1:
print("发生成功")
else:
print("发送失败")

函数的变量:局部变量----全局变量

局部变量:针对某一个函数的内部的声明

全局变量:针对某一个.py文件,在文件的内部是有效的

age =28   #程序全局变量
def sayHi(name):
age = 29 #函数局部变量
'''this is my first test function'''
print ("hello %s,how are you?,my age is %s!") %(name,age) sayHi('mosson')
print( 'age:',age)

让局部变量有全局变量的作用

更改方法;让局部变全局  global更改局部变全部 不建议使用

#age =28

def sayHi(name):

        global age

        age = 29

        '''this is my first test function'''

        print("hello %s,how are you?,my age is %s!") %(name,age)

sayHi('mososn')

print ('age:',age)

作业:

1.普通参数,指定参数,默认参数,动态参数的区别

  普通参数传递的个数和顺序要明确,默认参数传递的时候,如果没有给默认参数复制的话,会使用默认值,如果给定了的话,就会使用给定值。动态参数的个数不确定,可以传递任意个参数,这些参数自动组装成一个元组,可以在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去,指定参数传递的是一个明确的类似键值,这些参数自动组装成一个字典,可以先定义一个字典,在前面加上**变成关键字参数传给函数。

2.写函数计算传入的字符串中:数字、字母、空格以及其他的个数

def fun(s):
digitnum, alphanum, sapcenum, othernum=0,0,0,0
for i in s:
if i.isdigit():
digitnum+=1
elif i.isalpha():
alphanum+=1
elif i.isspace():
sapcenum+=1
else:
othernum+=1
return (digitnum,alphanum,sapcenum,othernum)

3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5

def fun(s):
ret=False
if isinstance(s,str) or isinstance(s,str) or isinstance(s,tuple):
if len(s)>5:
ret=True
return ret

4.写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容

def fun(s):
ret=False
if isinstance(s, str) or isinstance(s, str) or isinstance(s, tuple):
for i in s:
if i=='':
ret=True
break
return ret  

Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数的更多相关文章

  1. 巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝

    1.基本数据类型补充 2.深浅拷贝 DAY7-基本数据类型(基本数据类型补充&深浅拷贝) 本节主要内容: 1.补充基础数据类型 (1)join方法 (2)split方法 (3)列表不能在循环时 ...

  2. python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域

    上节课总结 1 运算符 in 字符串 判断  : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...

  3. Python全栈之路----常用数据类型--集合

    集合(set):无序的,不重复的数据组合,它的主要作用如下:  · 去重,把一个列表变成集合,就自动去重了  · 关系测试,测试两组数据之间的交集.差集.并集等关系 1.基本操作:修改,删除,合并 & ...

  4. Python全栈之路目录结构

    基础 1.Python全栈之路-----基础篇 2.Python全栈之路---运算符与基本的数据结构 3.Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数 4.Python全栈 ...

  5. Python全栈之路----目录

    Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...

  6. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  7. python 全栈之路

    目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...

  8. Python全栈之路----函数----返回值

    函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...

  9. Python全栈之路4--内置函数--文件操作

    上节重点回顾: 判断对象是否属于某个类,例如: 列表中有个数字,但是循环列表判断长度,用len会报错;因为int不支持len,所以要先判断属于某个类,然后再进行if判断. # isinstance(对 ...

随机推荐

  1. oracle审计详解-转

    http://blog.chinaunix.net/u2/66903/showart_2082884.htmlOracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这 ...

  2. [Spring] IOC - Annotation

    Spring Annotation使用例子. 与XML配置的例子一样:http://www.cnblogs.com/HD/p/3962541.html Project结构: 配置文件:springCo ...

  3. jquery 如何遍历json

    var obj = {"status":1,"bkmsg":"\u6210\u529f","bkdata":[" ...

  4. How to Failover the ‘Cluster Group’

    If you have more than two nodes in the cluster, you can specify the destination node with the follow ...

  5. android学习笔记51——SQLite 手势Gesture

    手势Gesture 所谓手势,是指用户手指或触摸笔在触摸屏幕上的连续触碰行为. Androi对两种手势行为都提供了支持: 1.对于第一种手势而言,android提供了手势检测,并为手势检测提供了相应的 ...

  6. linux 下 ntfs移动硬盘挂载

    fdisk -l Disk /dev/sdb: 500.0 GB, 500074283008 bytes255 heads, 63 sectors/track, 60797 cylindersUnit ...

  7. Makefile中的特殊宏定义以及实用选项

    Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名 ...

  8. JavaScript插件架构

    1.HTML布局规则 默认情况下,所有的插件都可以通过设置特定的HTML代码和相应的属性来实现.也就是说,在网页加载的时候,JavaScript代码会自动检测这些标记,并自动绑定相应的事件,而无需添加 ...

  9. ImageLoader介绍2

    Universal Image Loader 是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨试试它.他本来是 ...

  10. Wampserver2.5配置虚拟主机出现403 Forbidden解决办法

    一直在用APMServ5.2.6,mysql好办,可以用mariadb代替进行升级,但php升级到5.4.7就没办法再升级,安装加速器也困难.就想迁移到Wampserver上来,以前也尝试过Wamps ...