2020-11-05

  1. 关键字参数要在位置参数后边。
In [11]: def f(a,b):
    ...:     print(a,b)
    ...:     

In [12]: f(a=0,5)
  File "<ipython-input-12-5041dccca78c>", line 1
    f(a=0,5)
         ^
SyntaxError: positional argument follows keyword argument


In [13]: f(0,5)
0 5

In [14]: f(0,b=8)
0 8
  1. 下列代码运行结果是?
a='a'
print(a>'b' or 'c')

答案:c。逻辑运算符两侧如果是bool类型,那还好。如果不是,就要当心了。因为这时它返回的不是True或者False,而是运算符两边的某一个值。python的逻辑运算符是很“懒”的,and的时候,如果第一个为真,他就直接返回第一个值,不会检查后边的;如果第一个为假,他就检查后边的,返回后边的值。同理,or的时候,第一个为真就直接返回第一个的值;反之,他就检查后边的,返回后边的值。
4. Python中单下划线_foo与双下划线__foo与__foo__的成员,下列说法正确的是?
A. _foo 不能直接用于’from module import *’
B. __foo解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名
C. __foo__代表python里特殊方法专用的标识
D.__foo 可以直接用于’from module import *’
答案:ABC.

  • 名称前的单下划线(如:_shahriar),程序员使用名称前的单下划线,用于指定该名称属性为“私有”。这有点类似于惯例,为了使其他人(或你自己)使用这些代码时将会知道以“_”开头的名称只供内部使用。正如Python文档中所述:

以下划线“_”为前缀的名称(如_spam)应该被视为API中非公开的部分(不管是函数、方法还是数据成员)。此时,应该将它们看作是一种实现细节,在修改它们时无需对外部通知。

正如上面所说,这确实类似一种惯例,因为它对解释器来说确实有一定的意义,如果你写了代码“from <模块/包名> import *”,那么以“_”开头的名称都不会被导入,除非模块或包中的"__all__"列表显式地包含了它们。

  • 名称前的双下划线(如:__shahriar)

名称(具体为一个方法名)前双下划线(__)的用法并不是一种惯例,对解释器来说它有特定的意义。Python中的这种用法是为了避免与子类定义的名称冲突。Python文档指出,“__spam”这种形式(至少两个前导下划线,最多一个后续下划线)的任何标识符将会被“_classname__spam”这种形式原文取代,在这里“classname”是去掉前导下划线的当前类名。

  • 名称前后的双下划线(如:init

这种用法表示Python中特殊的方法名。其实,这只是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。例如,当定义一个类时,你经常会覆写“init”方法。

虽然你也可以编写自己的特殊方法名,但不要这样做。
4. 筛法求素数个数

import math
def sieve(size):
    sieve= [True] * size
    sieve[0] = False
    sieve[1] = False
    for i in range(2, int(math.sqrt(size)) + 1):
        k= i * 2
        while k < size:
           sieve[k] = False
           k += i
    return sum(1 for x in sieve if x)
print(sieve(10000000000))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值