叨扰的英文译语怎么说-美军轰炸阿医院
2023年4月2日发(作者:靠得住)
Faker新版本Faker类的⽤法
⼤家好,我是练习时长两年半的⼤数据练习⽣,喜欢数学,AI,⼤数据。
写博客是为了总结,分享,⾃娱⾃乐。希望写出的东西会对⾃⼰,对别⼈都有价值!
废话不多说,现在是个终⾝学习的时代,开始学习了!奥⼒给!⼲了兄弟们!
是时候展现真正的技术了:
创建Faker对象
第⼀种2.0.4版本及以下常⽤写法
fromfakerimportFactory
fake=()
第⼆种新版本创建Faker代理类⽽不是()
fromfakerimportFaker
fake=Faker()
第⼀种是⽼版本的,第⼆种是新版本的,两种都可以使⽤,但是在seed()上有⼀点区别
新版本Faker的seed()
在新版本Faker类的基础上,你不能调⽤类的实例.seed()⽅法了,会报类型错误,取⽽代之的是()
在新版本Faker类基础上⽤旧版本写法会抛出异常:
fromfakerimportFaker
fake=Faker()
(0)#抛出异常TypeError
现在你得⽤新版本的写法:
fromfakerimportFaker
fake=Faker()
(0)
如果你⼀定要⽤⽼版本的写法,那你创建Faker对象的时候要⽤⽼版本()的创建⽅法。
Faker代理类实现细节
新的Faker实例只是引⽤了Generator对象的代理对象,它⽤于实例化时指定使⽤的语种,这些Generator对象们只是旧Faker对象的不同
的实例⽽已。
如果只有⼀个内部的Generator对象,那新的Faker实例就只⽀持⼀种语⾔,如果有多个内部Generator对象,那么Faker实例就会⽀持多
种语⾔。
在单语种模式下,新的Faker实例可以简单的被迫表现为像是⽤旧Faker创建出来的实例⼀样,因为类似的接⼝可以在新的Faker实例上公
开,然后1:1地调⽤代理⽅法、properties和attributes到唯⼀的⽣成器对象。事实上,这就是实现它的⽅式,也是保持向后兼容性的⽅式
(除了())。
然⽽,在多语种模式下,这种1:1映射不再存在了,调⽤的代理⽅式取决于属性是⼀个provider的⽅法或者是存在于⽣成器对象中的某个属
性。有可能提供健全的默认实现,像我们为seed_instance所做的那样巧妙地映射,但是其他的像add_provider和随机的getter和setter更依
赖于特定的⽤例,或者有潜在的危险。
在这些情况下,对使⽤者来说更好的情况是⽤它们的实现或者直接调⽤这些来⾃于内部Generator对象⾃⼰的⽅法来创建它们⾃⼰的⼦类
(这⼀段翻译过来我也没看懂是啥意思,等我后边懂了再回来注解或者修改把)
代理类的属性名解析
这个代理类指新版本Faker类。
代理类有⼀个属性名称解析⾏为,运⾏顺序如下:
1.如果属性名是seed,那就抛出TypeError异常,这样可以防⽌实例调⽤seed⽅法(与上⽂呼应,新版Faker类的实例不能调
⽤seed()⽅法⽽是())
2.如果属性名不是seed,那就检查属性名称是否与代理类实例中的属性匹配。如果匹配就返回匹配的属性。
3.如果属性名称与代理类实例中的属性不匹配,那就判断实例是否为单语种模式,如果是的话,那就代理调⽤唯⼀的Generator对象,
并尝试返回⼀个匹配的属性。
4.如果是在多语种模式下,就判断属性名是否和Generator的属性匹配,如果匹配,就抛出NotImplementedError.
5.如果不匹配,就判断属性名是否匹配缓存模式正则表达式,如果不匹配,抛出AttributeError,因为如果匹配的话,第⼆步就应该处理
完了。
6.如果不满⾜上⾯所有情况,假设属性名可能引⽤了⼀个provider的⽅法,并且进⾏Generator/Factory模式的选择,并且代理调⽤被选中
的Generator对象
Factory/generator的选择将会在后边讨论
语种设定
⼀个新的Faker实例会在单语种或多语种环境下⼯作,取决于你传递的locale值,这个值可以是下⾯的⼏种:(下划线是_连字符是-)
空值,啥也不传,None(默认设置为en_US)
⼀个有效的地点字符串,带下划线或连字符的
⼀个列表,元组,或者集合⾥边放着有效地点字符串,带下划线或钱塘湖春行原文及注释 连字符的
⼀个key-valuue键值对(key是地点字符串,v以春节为主题的古诗 alue是权重)的有序字典
前两个⽼Faker⽀持,所以新Faker也⽀持,所以调⽤前两个总会⽣成⼀个单语种模式的新Faker实例,在这个模式下,实际上不需要检索对
内部Generator对象的引⽤
,因为前⾯讨论过的1:1⾏为。
潜在的缺陷存在于多语种模式下和需要单独访问内部⽣成器对象时。由于语⾔环境字符串可以⽤(en_US)或者(en-US)编写,这可能导致混
乱或错误,所以语⾔环境字符串必须被规范化处理,以提供⼀致的没有重复的结果。
在实例化过程中,新Faker会将语⾔环境字符串规范为下划线的形式,它也会按照原样存储它们,换句话说,en_US和en-US都被指定时,
将会被视为相同的。最后被处理的将会被看作副本,重复的,然后被清除。通过索引访问内部Generator对象时也会执⾏对应的正则。
例如,下⾯的代码将会创建⼀个新Faker实例,即使你制定了4个地区,这个新Faker实例也是单语种模式下的。
\"\"\"
即使你指定了4个语种,它也是单语种模式下的
\"\"\"
fromfakerimportFaker
fake=Faker([\'en-US\',\'en_US\',\'en_US\',\'en-US\'])
#将会打印[\'en_US\']
print(s)
#获得en-USgenerator的引⽤
us1=fake[\'en_US\']
#获得en-USgenerator的引⽤
us2=fake[\'en-US\']
#将会打印True
print(us1==us2)
多语种模式
为了启动多语种模式,参数local的值必须是由不⽌⼀个有效的语⾔环境字符串组成的列表,元组,集合或OrderedDict
例如:
fromcollectionsimportOrderedDict
fromfakerimportFaker
locale_list=[\'en-US\',\'ja-JP\',\'en_US\']
fake1=Faker(locale_list)
#将会打印[\'en_US\',\'ja_JP\']
pri林表明霁色的意思 nt(s)
locale_odict=OrderedDict([
(\'en-US\',1),
(\'ja-JP\',2),
(\'en_US\',2),
])
fake2=Faker(locale_odict)
#将会打印[\'en_US\',\'ja_JP\']
print(s)
在多语种模式下,从新Faker实例中调⽤预期的provider⽅法将会运⾏Factory/Selection逻辑。
Factory/Selection逻辑如下:
1.判断缓存映射是否已经存在于provider的⽅法中,如果存在那就使⽤这个映射,
然后判断有没有generator⽀持provider的⽅法,如果没有,那将会像使⽤旧Faker⼀样抛出AttributeError
2.如果缓存映射不存在于provider的⽅法中,那就判断哪个Generator对象⽀持provider⽅法,如果在实例化期间提供了相应的权重,
那就缓存映射结果以及相应的权重。
3.如果这⾥只有⼀个generator⽀持provider⽅法,那就返回这唯⼀的⼀个generator。
4.如果这⾥可以使⽤的generator不⽌⼀个,并且提供权重了,那就使⽤提供的权重定义的分布随机选择⼀个generator。
除了能够提供给每个语种对应的⽣成概率,并且最⼩化性能损失之外,factoryselection逻辑保证了只要⾄少有⼀个generator对象⽀持
provider的⽅法,那调⽤provider⽅法就不会失败。
实例
如果你能看懂下⾯这些代码,那说明你理解了上⾯的内容,恭喜。
fromcollectionsimportOrderedDict
fromfakerimportFaker
locales=OrderedDict([
(\'en-US\',1),
(\'en-PH\',2),
(\'ja_JP\',3),
])
fake=Faker(locales)
#获取实例化期间指定的地区列表
print(s)
#获取这个Faker对象的内部⽣成器列表
print(ies)
#获取\'en_US\'locale的内部⽣成器
print(fake[\'en_U清明节发朋友圈的句子 S\'])
#获取“en_PH”语⾔环境的内部⽣成器
print(fake[\'en_PH\'])
#获取“ja_JP”语⾔环境的内部⽣成器
print(fake[\'ja_JP\'])
#瞎写地区将会抛出KeyError并提⽰\'en_GB\'wasnotincluded
print(fake[\'en_GB\'])
#设置共享的``对象的seed
#跨越所有将被创建的内部⽣成器
(0)
#设置唯⼀的``对象的seed
#eachinternalgeneratorofthis`Faker`insta灯火阑珊 nce
_instance(0)
#为这个Faker实例的en_US内部generator创建并seed⼀个独⼀⽆⼆的``对象
_locale(\'en_US\',0)
#在提供权重的基础上创建⼀个随机的name
#⽣成特定语⾔的概率=每种语⾔的权重/所有语⾔加起来总权重
#en_US-16.67%ofthetime(1/(1+2+3))
#en_PH-33.33%ofthetime(2/(1+2+3))
#ja_JP-50.00%ofthetime(3/(1+2+3))
()
#⽣成⼀个en_US语种下的name
fake[\'en-US\'].name()
#⽣成⼀个建⽴在提供的权重的基础上的zipcode
#注意:en_PH并不⽀持zipcodeprovider⽅法
#en_US-25%ofthetime(1/(1+3))
#ja_JP-75%ofthetime(3/(1+3))
e()
#⽣成⼀个在ja_JP语种下的zipcode
fake[\'ja_JP\'].zipcode()
#将会抛出AttributeError
fake[\'en_PH\'].zipcode()
#⽣成⼀个Luzonprovince的名字
#注意:创建时提供的三种语种之中只有en_PH⽀持这个provider⽅法
_province()
#⽣成⼀个Luzonprovincename
fake[\'en_PH\'].luzon_province()
#抛出⼀个AttributeError
fake[\'ja_JP\'].luzon_province()
⼩伙伴们!相信看到这⾥的你⼀定有所收获!
如果我哪⾥写错欢迎评论区来喷
如果觉得对你有帮助请给个赞哦亲!无言独上西楼
最后引⽤名⾔⼀句:我们⽆论遇到什么困难,都不要怕,微笑着⾯对它!消除恐惧的最好办法就是⾯对恐惧!加油!奥⼒给!
更多推荐
faker是什么意思er在线翻译读音例句
发布评论