在使用Python处理数据或者是开发网站时,有时候会使用一些无意义的假数据,比如用户详情页信息。我们来制作这样一个填充用户假数据的小工具,这个小工具的设计思路如下:
先创建三个元组,分别用来储存姓、单字名、双字名:
fn=('李','王','张','刘')
ln1=('娉','览','菜','屹')
ln2=('治明','正顺','书铎')
定义父类FakeUser:
class FakeUser:
def fake_name(self,one_word=False,two_words=False):
if one_word:
full_name=random.choice(fn)+random.choice(ln1)
elif two_words:
full_name = random.choice(fn) + random.choice(ln2)
else:
full_name=random.choice(fn)+random.choice(ln1+ln2)
print(full_name)
def fake_gender(self):
gender=random.choice(['男','女','未知'])
print(gender)
定义子类SnsUser:
class SnsUser(FakeUser):
def get_followers(self,few=True,a_lot=False):
if few:
followers=random.randrange(1,50)
elif a_lot:
followers = random.randrange(200, 10000)
print(followers)
完整代码如下:
import random
fn=('李','王','张','刘')
ln1=('娉','览','菜','屹')
ln2=('治明','正顺','书铎')
class FakeUser:
def fake_name(self,one_word=False,two_words=False):
if one_word:
full_name=random.choice(fn)+random.choice(ln1)
elif two_words:
full_name = random.choice(fn) + random.choice(ln2)
else:
full_name=random.choice(fn)+random.choice(ln1+ln2)
print(full_name)
def fake_gender(self):
gender=random.choice(['男','女','未知'])
print(gender)
class SnsUser(FakeUser):
def get_followers(self,few=True,a_lot=False):
if few:
followers=random.randrange(1,50)
elif a_lot:
followers = random.randrange(200, 10000)
print(followers)
user_a=FakeUser()
user_b=SnsUser()
user_a.fake_name()
user_b.get_followers(few=True)
运行结果如下:
张书铎
34
此时,我们每次只能产生一个随机名字和随机的跟随者数量,那如何批量产生呢?
我们要用到一个新的概念,叫做“生成器”。简单的来说,在函数中我们只要在任意一种循环(loop)中使用yield返回结果,就可以得到类似于range 函数的效果。代码如下:
import random
fn=('李','王','张','刘')
ln1=('娉','览','菜','屹')
ln2=('治明','正顺','书铎')
class FakeUser:
def fake_names(self,amount=1,one_word=False,two_words=False):
n=0
while n<=amount:
if one_word:
full_name=random.choice(fn)+random.choice(ln1)
elif two_words:
full_name = random.choice(fn) + random.choice(ln2)
else:
full_name=random.choice(fn)+random.choice(ln1+ln2)
yield full_name
n+=1
def fake_gender(self,amount=1):
n=0
while n<=amount:
gender=random.choice(['男','女','未知'])
yield gender
n+=1
class SnsUser(FakeUser):
def get_followers(self,amount=1,few=True,a_lot=False):
n=0
while n<=amount:
if few:
followers=random.randrange(1,50)
elif a_lot:
followers = random.randrange(200, 10000)
yield followers
n+=1
user_a=FakeUser()
user_b=SnsUser()
for name in user_a.fake_names(30):
print(name)
for gender in user_a.fake_gender(30):
print(gender)
给定fake_names和fake_gender参数值,即可生成所需数量的名字和性别,这里我们生成10个,效果如下:
张览
李正顺
王娉
李娉
王治明
王书铎
张览
王览
王屹
王正顺
王娉
未知
女
男
男
男
未知
女
女
未知
男
女