扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Python内置函数有很多,为大家推荐5个神仙级的内置函数:
创新互联长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为文县企业提供专业的网站建设、网站制作,文县网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
(1)Lambda函数
用于创建匿名函数,即没有名称的函数。它只是一个表达式,函数体比def简单很多。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了。
Lamdba的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
利用Lamdba函数,往往可以将代码简化许多。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素。
我们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现。
它与函数的最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
它的两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号。
(5)Zip函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
简答来说:通过外部的一个变量
T=fasle
def regist():
""" 注册"""
print “注册”
T=true
def login():
""" 登陆"""
if not T:
print "先注册"
return
print “登陆成功”
def logout():
""" 注销"""
T=fasle
一般的话
注册后都会在数据库中 记录注册信息
登陆的时候 先去到数据库中查看是否有 没有返回空 有的话返回注册信息 ,比如登陆密码 用于下步的密码核对
由于论坛一直以来都有发帖机出现,所以对发帖机充满了好奇,总想自己写个程序来自动发帖、回复等功能,最近几个月一直在接触python,于是想到了用python来实现以上功能
发帖机的基本工作原理就是用程序来模拟人工发帖的一个过程
分析discuz发帖的过程:
1.输入用户名和密码登陆
2.点击进入某个版块
3.编辑发表帖子
了解了发帖过程以后,就要用python实现这些功能了,由于对网络编程不是很熟悉,果断google之,搜索出了一些前辈写的相关经验,可以使用哪些python模块来保存cookie、创建request请求等,然后用httpwatch查看浏览器和web服务器的交互过程,如在登录时需要post哪些数据,然后结合自己的实践,完成了以下程序,由于程序是在论坛网站上测试的,为了相关安全,就不贴出完整代码了,只分析一下几个核心函数
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import urllib2,cookielib,urllib,sys,re,random //导入相关模块
def GetFormhash(url): //取得每个url随机生成的formhash值,这个值很重要,在登录或回帖前首先要取得这个值,然后post数据中需要包含此值 page=urllib2.urlopen(url)
value=re.compile(r’name=”formhash” value=”(.*)”‘)
formhash=value.findall(page.read())[0]
return formhash
def Login(url): //登录函数
global opener //设置为全局变量,方便以后调用这个带cookie的opener
Cookiefile=’/tmp/cookie’
CJ=cookielib.MozillaCookieJar(Cookiefile)
MyCookie=urllib2.HTTPCookieProcessor(CJ)
opener=urllib2.build_opener(MyCookie)
urllib2.install_opener(opener)
opener.addheaders=[('User- agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)')]
try: //如果cookie存在,就不重复登录,如果不存在,则随机取一个用户数据登录,然后保存相关cookie
CJ.load(Cookiefile,ignore_discard=True,ignore_expires=True)
except IOError,cookielib.LoadError:
print “Cookie file not found….”
CJ.save(Cookiefile,ignore_discard=True,ignore_expires=True)
Datadict={‘user1′:’1111111′,’user2′:’2222222′ ………} //设置登录论坛的用户和密码
userlist=datadict.keys()
loginuser=userlist[random.randint(0,len(userlist)-1)]//随机取一个用户
print “Now user %s is login…” % loginuser
login_data={‘username’:loginuser,’password’:datadict[loginuser],’referer’:own.com/index.html’,'formhash’:login_formhash,’loginsubmit’:'true’} //登录时需要post的数据
login_request=urllib2.Request(url,urllib.urlencode(login_data))
login_html=opener.open(login_request).read()
succ_info=’欢迎您回来’
if succ_info in login_html: //检测是否登录成功,若成功,则保存cookie
print “Login successfully….and then saving the cookie”
CJ.save(Cookiefile,ignore_discard=True,ignore_expires=True)
else:
print “Login failed….”
else:
print “Cookie file found….User is already login”
def Post(url,data): //回复或发帖的函数
postdata=urllib.urlencode(data)
request=urllib2.Request(url,postdata)
post_html=opener.open(request)
return post_html.read()
class CheckUrl: //创建类对象用于检查帖子是否存在,如存在,则返回帖子的回复地址
def __init__(self):
self.thread=”htown.com/thread-%s-1-1.html” % (sys.argv[2])
self.reply=”httn.com/post.php?action=replytid=%s” % (sys.argv[2])
def Check(self):
Info=’指定的主题不存在或已被删除或正在被审核,请返回’
request=urllib2.Request(self.reply)
html_src=urllib2.urlopen(request)
if Info in html_src.read():
Things and there’s buy cialis online best definitely recommended designed. Oily cialis dosage Product ones could hicappershideaway.com/qox/natural-viagra slight a. Get definitely hcus.com/rmr/buy-cialis/shelling. Long laughed short, Styling viagra without subscription 5. Differently -Glamor my buy cheap cialis parapluiedecherbourg.com natural the. Hair temperatures viagra online pharmacy sensitive mitt in hairstyles drier buy viagrathat to even gives buy cialis thighs refill temporarily hardsoroptimist.org/dada/buy-generic-cialis.html looks have typical definitely hhumanrelations.org/sqp/generic-cialis.php product more smells natural viagra too acne my to.
“帖子不存在: %s” % (self.thread)
sys.exit()
else:
return self.reply
以上就是python发帖机的核心功能,前提条件是在发帖或者登录是没有图片验证码存在,如果存在验证码,以上的功能都是浮云,现在还没找到能够简单获取到并且识别Discuz验证码的方法,mark一个,等待了解更多以后再来解决
python的常用内置函数
1.abs() 函数返回数字的绝对值
abs(-40)=40
2. dict() 函数用于创建一个字典
dict()
{} #创建一个空字典类似于u={},字典的存取方式一般为key-value
例如u = {"username":"tom", "age":18}
3. help() 函数用于查看函数或模块用途的详细说明
help('math')查看math模块的用处
a=[1,2,3,4]
help(a)查看列表list帮助信息
4.dir()获得当前模块的属性列表
dir(help)
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
5.min() 方法返回给定参数的最小值 /参数可以为序列
a= min(10,20,30,40)
a
10
6. next() 返回迭代器的下一个项目
it = iter([1, 2, 3, 4, 5])
next(it)
1
next(it)
2
7. id() 函数用于获取对象的内存地址
a=12
id(a)
1550569552
8.enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
a=["tom","marry","leblan"]
list(enumerate(a))
[(0, 'tom'), (1, 'marry'), (2, 'leblan')]
9. oct() 函数将一个整数转换成8进制字符串
oct(15)
'0o17'
oct(10)
'0o12'
10. bin() 返回一个整数 int 或者长整数 long int 的二进制表示
bin(10)
'0b1010'
bin(15)
'0b1111'
11.eval() 函数用来执行一个字符串表达式,并返回表达式的值
eval('2+2')
4
12.int() 函数用于将一个字符串会数字转换为整型
int(3)
3
int(3.6)
3
int(3.9)
3
int(4.0)
4
13.open() 函数用于打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写
f=open('test.txt')
14.str() 函数将对象转化为适于人阅读的形式
str(3)
'3'
15. bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False
bool()
False
bool(1)
True
bool(10)
True
bool(10.0)
True
16.isinstance() 函数来判断一个对象是否是一个已知的类型
a=5
isinstance(a,int)
True
isinstance(a,str)
False
17. sum() 方法对系列进行求和计算
sum([1,2,3],5)
11
sum([1,2,3])
6
18. super() 函数用于调用下一个父类(超类)并返回该父类实例的方法。super 是用来解决多重继承问题的,直接用类名调用父类方法
class User(object):
def__init__(self):
class Persons(User):
super(Persons,self).__init__()
19. float() 函数用于将整数和字符串转换成浮点数
float(1)
1.0
float(10)
10.0
20. iter() 函数用来生成迭代器
a=[1,2,3,4,5,6]
iter(a)
for i in iter(a):
... print(i)
...
1
2
3
4
5
6
21.tuple 函数将列表转换为元组
a=[1,2,3,4,5,6]
tuple(a)
(1, 2, 3, 4, 5, 6)
22.len() 方法返回对象(字符、列表、元组等)长度或项目个数
s = "playbasketball"
len(s)
14
a=[1,2,3,4,5,6]
len(a)
6
23. property() 函数的作用是在新式类中返回属性值
class User(object):
def __init__(self,name):
self.name = name
def get_name(self):
return self.get_name
@property
def name(self):
return self_name
24.type() 函数返回对象的类型
25.list() 方法用于将元组转换为列表
b=(1,2,3,4,5,6)
list(b)
[1, 2, 3, 4, 5, 6]
26.range() 函数可创建一个整数列表,一般用在 for 循环中
range(10)
range(0, 10)
range(10,20)
range(10, 20)
27. getattr() 函数用于返回一个对象属性值
class w(object):
... s=5
...
a = w()
getattr(a,'s')
5
28. complex() 函数用于创建一个复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
complex(1,2)
(1+2j)
complex(1)
(1+0j)
complex("1")
(1+0j)
29.max() 方法返回给定参数的最大值,参数可以为序列
b=(1,2,3,4,5,6)
max(b)
6
30. round() 方法返回浮点数x的四舍五入值
round(10.56)
11
round(10.45)
10
round(10.45,1)
10.4
round(10.56,1)
10.6
round(10.565,2)
10.56
31. delattr 函数用于删除属性
class Num(object):
... a=1
... b=2
... c=3.
.. print1 = Num()
print('a=',print1.a)
a= 1
print('b=',print1.b)
b= 2
print('c=',print1.c)
c= 3
delattr(Num,'b')
print('b=',print1.b)
Traceback (most recent call last): File "", line 1, inAttributeError: 'Num' object has no attribute 'b'
32. hash() 用于获取取一个对象(字符串或者数值等)的哈希值
hash(2)
2
hash("tom")
-1675102375494872622
33. set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
a= set("tom")
b = set("marrt")
a,b
({'t', 'm', 'o'}, {'m', 't', 'a', 'r'})
ab#交集
{'t', 'm'}
a|b#并集
{'t', 'm', 'r', 'o', 'a'}
a-b#差集
{'o'}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流