if条件判断语句的运用

if条件判断语句的运用

if的基本格式

if语句用来做判断,并选择要执行的语句分支。基本格式如下:

if CONDITION1:
    code_block(1)
elif CONDITION2:
    code_block(2)
elif CONDITION3:
    ...
...
else:
    code_block_else

 

其中elif是可选的,可以有任意多个,else是可选的,表示全都不满足条件时该执行的分支。
例如:

a = 4
if a > 3:
    print("hello world")条件表达式Condition部分以运算结果的True、False为if的分支执行依据。在Python中所有数据对象要么是True,要么是False,所以任何一个数据、表达式都可以作为if的Condition。例如:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
if 1:
    ...

if a > b:
    ...

if 'a':
    ...

if []:
    ...

if [[]]:
    ...

if a and b:
    ...

 

switch/case的替代方案

在python中并没有switch和case的分支选择语句,但是使用if或dict也能轻松实现。

例如,使用dict实现等值的分支选择:

D = {
    "apple": 8.0,
    "pear": 3.5,
    "orange": 2.5,
    "banana": 2.5
}

fruit = "banana"

print(D[fruit])

 

上面没有提供default情况时的分支,但使用get()可以设置dict中找不到key时默认返回的值。例如:

print(D.get("greens","no this fruit"))
  • 1

还可以通过in的成员测试来设置分支:

if fruit in D:
    print(D[fruit])
else:
    print("no this fruit")dict只能做等值比较的分支选择,要提供非等值的分支比较,只能用if语句。

例如:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
score = 77

if score >= 90:
    print("优秀")
elif 70 <= score < 90:
    print("良好")
elif 60 <= score < 70:
    print("及格")
else:
    print("不及格")

 

使用if的好处是通俗易懂,使用dict的好处是将数据存储到数据结构中,而存储到数据结构中的数据可以是很复杂的。比如,将函数作为dict的value。

if/else三元表达式

即所谓的三目运算,只不过python中不支持x ? y : z的方式,而是使用if的另一种表达式语法。

对于if x: xxx; else yyy这样的两分支语句,可以使用更精简的表达式方式来描述:

xxx if x else yyy
  • 1

虽然看上去和原始的没什么区别,但很多时候要方便的多。例如赋值:

if x:
    a = y
else:
    a = z

 

等价的三元if写法:

a = y if x else z
  • 1

注意,上面”=”表示这整行是一个赋值语句,右边的是评估对象,评估之后赋值给a,也就是等价于a = (y if x else z),而不是等价于(a = y) if x else z。

else不能缺少,否则不是三元运算。另外,if的分支代码体y和z都必须只能是单条语句,不能是多语句。也就是说,不能转换下面的代码格式为三元表达式。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
if x:
    statement1
    statement2
else:
    statement3
    statement4

 

实际上,三元运算也能使用and / or来实现,还能使用序列 + bool()来实现。

例如:

a = ((x and y) or z)
  • 1

一般比较少用and/or来实现分支,因为可读性不好,而且并不总是能和if等价。但有一种情况使用and/or非常方便:从多个值中选择一个真值。例如:

a = x or y or z or None
  • 1

下面是使用序列 + bool()的方式实现的三元运算操作,思路是bool(CONDITION)作为序列的索引。

a = [y, z][bool(x)]
  • 1

还是那句话,python中基本总是首选简单的、通俗易懂的方式。所以,用if吧。

关于序列操作的方式方法

关于序列操作的方式方法

序列是指按照位置顺序来存储数据的数据结构,也就是说能通过数值索引进行操作。实际上,python对序列的解释是:只要类型对象中重载了__len__()__getitem__(),且它们的整数参数从0开始,就表示这个类型满足序列协议,是一个序列类型。

python有三种基本的序列类型:列表、元组和range对象。当然,还有特别定制的序列类型:str和binary data。

序列类型又分为可变序列和不可变序列。可变序列表示可以原处修改的序列,不可变序列意味着不允许原处修改。例如,列表是可变序列,字符串是不可变序列。

序列的通用操作

下面这些操作是序列通用的,无论是可变、不可变序列。但通用并不意味着所有序列都支持这些操作,有些特殊的序列因为某些原因不支持某些操作也是合理的。

注意:python中序列操作在索引越界的时候都会报错。

1.测试元素是否存在

x in S和x not in S,返回True或False。例如:

>>> 'a' in "abcd"
True
>>> 'aa' in "abcd"
False
>>> 'ab' in "abcd"
True
>>> 3 in [1,2,3,4]
True

 

2.加法和乘法符号

S1 + S2S * NN * S,其中S1和S2是同一种序列类型,N表示序列的重复次数。

例如:

>>> [1,2] + [3,4]
[1, 2, 3, 4]

>>> [1,2] * 3
[1, 2, 1, 2, 1, 2]
>>> 3 * [1, 2]
[1, 2, 1, 2, 1, 2]

 

注意,序列中保存的是元素的引用地址,所以对于序列中的可变元素,+ *时需要注意修改的影响范围:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = [1,2,3,4]
>>> L1 = [['a'],['b']]

>>> L0 = L + L1
>>> L0
[1, 2, 3, 4, ['a'], ['b']]

>>> L1[0][0] = "aa"
>>> L0
[1, 2, 3, 4, ['aa'], ['b']]

 

上面修改”a”为”aa”也会影响到+的结果L0,因为[‘a’]是一个可变对象。同样对于*的重复操作,也是拷贝引用:

>>> L = []
>>> L1 = [L] * 3
>>> L1
[[], [], []]

>>> L.append(3)
>>> L1
[[3], [3], [3]]

 

3.len()、max()和min()函数

len()返回序列的元素个数,也就是序列的长度。min()和max()分别返回序列中*小、*大的元素。

>>> len(L), min(L), max(L)
(4, 'a', 'd')

 

4.找出元素在序列中出现的次数count()

>>> s="hello world"
>>> s.count("h"),s.count("o")
(1, 2)

 

5.索引取元素

S[i],i为从0开始的数值,可以取负数表示从尾部开始取。

例如:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L
['a', 'b', 'c', 'd']
>>> L[0]
'a'
>>> L[1]
'b'
>>> L[-1]
'd'

 

负数的i等价于len(S)+i作为索引。例如,len(S) = 3, i = -1,表示取*后一个元素,也就是index=2的元素。

6.分片

分片操作用于从序列中取出子序列,它会创建新的内存块来保存取出来的序列对象。

  • S[i:j]:从索引位i取到索引位j,不包括j
  • S[i:]:从索引位i开始取到*结尾
  • S[:j]:从*开头取到索引位j,不包括j
  • S[:]:从头取到尾,相当于拷贝了序列,但得到的是新序列
  • S[i:j:k]:k表示取元素时的步进间隔,默认为1,表示每个元素都取,如果为2,则表示取一个跳过一个

分片的区间是左闭右开的,所以不会包括j的索引位。i和j可以是负数,负数表示从尾部开始计算索引位。例如,-1表示*后一个元素,-2表示倒数第二个元素。

特别地,如果i = j,则表示找到序列中的这个位置,但因为切片长度位0,所以返回空。

例如:

>>> s = "hello world"
>>> len(s)
11

>>> s[0:6]
'hello '
>>> s[:6]
'hello '

>>> s[6:10]   # 不包括index=10
'worl'
>>> s[6:11]   # 所以用大于10的结束位
'world'
>>> s[6:]
'world'
>>> s[6:-1]
'worl'

>>> s[:]      # 拷贝序列得到副本
'hello world'

>>> s[::1]     # 步进为1,默认的
'hello world'
>>> s[::2]     # 每次跳过一个元素
'hlowrd'

>>> s[1:1]    # 找到index=1的位置
''

 

7.找出*个元素的位置index()

index(x,i,j)表示从序列中搜索元素x并返回*次出现的x的位置,如果给定了i,则表示从索引位i开始搜索,给定了j则表示*多搜索到索引位为j的位置。

如果找不到元素,将报错。i和j可以是负数,但无论它们是正数还是负数,都是搜索的开始和结束位。

>>> s="hello world"
>>> s.index("o")
4
>>> s.index("o",1,-1)
4
>>> s.index("o",-5)    # 从倒数第5个元素开始搜索
7
>>> s.index("a")       # 搜索不到时报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

 

不可变序列的操作

相比可变序列,不可变序列的唯一操作是可以支持内置的hash()操作。可变序列无法hash()。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> hash("asd")
-2014632507

>>> hash((1,23))
1320437575

>>> hash([1,23])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

 

能够hash的不可变序列,意味着能作为dict的key,能保存到set或frozenset中。

可变序列的操作

  • s[i] = x、s[i:j] = t将序列中的元素替换成x或可迭代对象t
  • s[i:j:K] = t将序列中的元素替换成可迭代对象t,t的长度必须和s[i:j:k]的长度一样
  • del s[i]、del s[i:j]删除序列中的元素,等价于s[i] = []、s[i:j] = []
  • del s[i:j:k]删除序列中的某些元素,k为步进值
  • s.remove(x):移除*次出现的元素x
  • s.clear()表示清空序列中的所有元素,等价于del s[:]
  • s.pop([i])表示移除序列s中的第i个元素并返回这个元素,中括号表示可选,如果没有参数,默认移除*后一个元素
  • s.append(x)向序列的尾部追加元素x,等价于s[len(s):len(s)] = [x]
  • s.extend(t)或s += t表示将t扩展到序列s的尾部,等价于s[len(s):len(s)] = t
  • s.insert(i,x)表示将x插入到序列中的i索引位置处,等价于s[i:i] = [x]
  • s *= n表示将序列n的元素重复n次追加到s的尾部
  • s.copy()表示拷贝序列得到一个新的序列副本,等价于s[:]
  • s.reverse()原地反转序列s,为了节约内存空间,所以是原地反转,不会返回反转后的序列

对于序列,还有一个内置函数reversed(SEQ)。与之对应的,还有一个内置函数sorted(),但它操作的对象是可迭代对象,并不一定总是序列。

示例1:序列元素赋值

>>> L = ['aa','bb','cc','dd','ee','ff']
>>> L1 = [1,2,3,4]

>>> L[0] = "a"
>>> L
['a', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L[1:2] = L1
>>> L
['a', 1, 2, 3, 4, 'cc', 'dd', 'ee', 'ff']

>>> L[::2] = [1,2,3,4,5]
>>> L
[1, 1, 2, 3, 3, 'cc', 4, 'ee', 5]

 

示例2:删除元素

删除相关操作有del、remove()、pop()、clear()。

例如:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = ['aa','bb','cc','dd','ee','ff']
>>> del L[1]
>>> L
['aa', 'cc', 'dd', 'ee', 'ff']
>>> del L[1:2]
>>> L
['aa', 'dd', 'ee', 'ff']
>>> del L[::2]
>>> L
['dd', 'ff']

>>> L = ['aa','bb','cc','dd','ee','ff']
>>> L.remove('aa')
>>> L
['bb', 'cc', 'dd', 'ee', 'ff']

>>> L.pop()
'ff'
>>> L
['bb', 'cc', 'dd', 'ee']

>>> L.pop(2)
'dd'
>>> L
['bb', 'cc', 'ee']

>>> L.clear()
>>> L
[]

 

示例3:添加元素

相关操作有append()、extend()、insert()、s *= n。

例如:

>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']
>>> L1 = [1,2,3,4]

>>> L.append("ff")
>>> L
['aa', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L.insert(1,"a")
>>> L
['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L.extend(L1)
>>> L
['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff', 1, 2, 3, 4]

>>> L1 * 2
[1, 2, 3, 4, 1, 2, 3, 4]

 

示例4:其它操作

拷贝序列copy()、反转序列reverse()。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']

>>> L1 = L.copy()
>>> L1
['aa', 'bb', 'cc', 'dd', 'ee']

>>> L.reverse()
>>> L
['ee', 'dd', 'cc', 'bb', 'aa']

 

还有一个可用于序列的内置函数reversed(),它反转序列,并返回可迭代对象。所以,如果要将它展现出来,需要构建容器。例如:

>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']

>>> list(reversed(L))
['ee', 'dd', 'cc', 'bb', 'aa']

>>> set(reversed(L))
{'aa', 'bb', 'ee', 'cc', 'dd'}

OS X 下使用 postman 到底怎么续签自己的 HTTPS 证书呢?

想要用 postman native 访问 https 的网站,然后找到了这篇教程。

http://blog.getpostman.com/2014/01/28/using-self-signed-certificates-with-postman/%C2%A0and

大概就是需要把不被信任的证书设置为信任,那么就可以访问 https 了,但是很奇怪,我拖拉下来的证书居然是过期的,所以我根本安装不了。

据说我可以自己签发证书,所以我找到了这篇文章

http://www.macx.cn/thread-2183761-1-1.html

然后成功生成了,安装上去的证书也是有效的。

于是我开启 postman ,结果还是报一样的错误,证书显示依然是 2015 年到期的那个..
到底要怎么做呢? (=@__@=)

证书 Postman 信任 拖拉9 条回复 • 2017-04-21 14:05:40 +08:00
tlday 1
tlday 2017-04-20 23:17:51 +08:00 via Android
用 Let’s Encrypt 不行么?
think2011 2
think2011 2017-04-20 23:33:45 +08:00
@tlday 我不是要给网站上 https ,我用的 postman 是个调试工具,想要抓取访问的流量,但是 https 需要证书才能正常访问。
tlday 3
tlday 2017-04-20 23:51:47 +08:00 via Android
我用 postman ,但是没碰到过必须要在本地调试 https 的情况…你发的*个 url 是针对 chrome app 里的 postman 的,是为了防止 chrome 直接拦截本地站点所提供的不被系统信任的 https 证书,才需要自己签发一个证书并加入自己的钥匙串来绕过拦截。
tlday 4
tlday 2017-04-20 23:52:51 +08:00 via Android
native 的 postman 直接有个选项可以调 https://www.getpostman.com/docs/ignoring_ssl ,在你的*个 url 的开头就已经说明了。
tlday 5
tlday 2017-04-21 00:00:25 +08:00 via Android
不知道是我没能理解你的意思还是我水平不够,你这个问题看的我有点无厘头…
think2011 6
think2011 2017-04-21 08:33:33 +08:00
@tlday 谢谢你

1. 我是想要本地调试 https 。
2. 我也关闭了你说的选项,我知道签发证书才能解决不被站点信任的问题。
3. 但是签发默认的证书(如图)是过期的,所以我没法签发或者加入到钥匙串里.. 这就是我遇到的问题.. 🙁

我接着根据第二个链接自签证书,也成功加入了钥匙串里,但是访问网站,依然提示如图的错误,显然签发的证书和被网站用的证书不是同一个。
tlday 7
tlday 2017-04-21 11:41:02 +08:00
@think2011 我大概明白你的想法了。在你的场景里面, https 并不是让网站信任你,而是你信任这个网站。我不知道你想调试什么东西,但是看起来你要调试的网站不是你的。而且这个网站提供的证书已经过期了。那么你是没有办法信任它的。即使是正规的 CA 签发机构签发的证书,只要过期,你就不会信任它了。要用 postman 调试它,只能通过 native 关闭那个选项的办法。不过我觉得你应该有一个原始问题,你可能走错路了。
tlday 8
tlday 2017-04-21 11:43:48 +08:00
你的*个 URL 挂了,我是搜索到的那篇文章。 http://blog.getpostman.com/2014/01/28/using-self-signed-certificates-with-postman/
think2011 9
think2011 2017-04-21 14:05:40 +08:00
@tlday 恩,非常感谢,我大概明白你的意思了,我再想想办法好了。

求推荐一台游戏服务器

需求:
1. 至少 4G 内存,windows 实例(跑 SQL),硬盘 CPU 无特别需求。
2. 网络能保证 30 人左右连接不会很卡(游戏没有大流量交互),且国内线路即可。
3. 心理价位 100CNY/月(似乎不太现实)。

在家里用虚拟机搭建了两天,200M 电信网络还是不行(可能是因为有个赚钱宝…)。
看了 阿里 腾讯 的,一个月都是 200 多,一次性买 3 年折扣倒是有 50%,但并不想掏这么多┑( ̄Д  ̄)┍。

希望能给几个参考,谢谢。
虚拟机 CNY SQL 实例5 条回复 • 2017-06-04 20:36:37 +08:00
tianshuang 1
tianshuang 2017-05-01 18:13:19 +08:00 ❤️ 1
https://www.qcloud.com/act/carnivaloutside?fromSource=gwzcw.106929.106929.106929
有台 79 的,2 核,4 G,1 Mbps。
Tiande 2
Tiande 2017-05-01 19:01:44 +08:00
@tianshuang 谢谢 租了一个月用用看 😉
tianshuang 3
tianshuang 2017-05-01 20:49:15 +08:00
@Tiande 客气了
thinkxen 4
thinkxen 2017-05-15 22:04:02 +08:00
阿里云吧~~
jack2411868 5
jack2411868 2017-06-04 20:36:37 +08:00
刚好有个活动,ImpactVPS 一年用优惠码 66 刀,拿去不谢
不让发外链了,靠,上 YQVPS.COM 看看

请问什么监控可以反映服务器一天内哪个/组进程占用 CPU/磁盘/内存等资源*多

我所知道的精细到每个进程的监控都仅仅反映实时情况;

而可以看到历史数据的都只有综合的图表,没有细分到进程、用户的,比如整个机器的 CPU/内存 /磁盘读写使用情况。

所以想请教一下,想可回溯地统计精细到进程、用户等的信息怎么做到。

进程 磁盘 CPU 精细9 条回复 • 2017-07-12 11:04:41 +08:00
hadoop 1
hadoop 2017-07-10 11:09:36 +08:00 via Android ❤️ 1
进程级流量监控没看到比较好的
jigloo 2
jigloo 2017-07-10 11:16:18 +08:00 via Android ❤️ 1
我用 Prometheus 和 granfana 做过,自己写 exporter 而已,不难。

cpu 内存磁盘*容易。其中 tcp 流量监控复杂一些,要用内核的新一些的特性才比较容易做。
jigloo 3
jigloo 2017-07-10 11:18:23 +08:00 via Android
哦,忘了说,据我所知,市面上没有现成开源的,所以我才自己弄的。
hadoop 4
hadoop 2017-07-10 12:39:42 +08:00 via Android
@jigloo tcp 流量监控能到进程级别吗
jigloo 5
jigloo 2017-07-10 13:17:48 +08:00 ❤️ 1
@hadoop 嗯,用的是 tcp_info 这个结构,原理和 netflix tcptop 差不多。不是非常准确,但是够用了。
jigloo 6
jigloo 2017-07-10 13:25:51 +08:00
也许我那天可以问上面,是否可以把这个 exporter 开源,也算解决痛点填补空白了。
jigloo 7
jigloo 2017-07-10 13:39:00 +08:00 ❤️ 1
哦,还有变通的一招。

把进程容器化,然后用 cadvisor。(这货非常吃 CPU 慎用)
rswl 8
rswl 2017-07-10 14:34:48 +08:00 ❤️ 1
grafana + influxdb + telegraf
QQ2171775959 9
QQ2171775959 2017-07-12 11:04:41 +08:00
专业的工具还是有蛮多的嘛。。。老兄多去试一下。。

100 个网站 放在一台高配置的服务器好还是放在十台低配置的服务器好

假设有 100 个网站,是放在一台高配置的服务器上好,还是放在十台每台只有那台高配置服务器的十分之一的服务器上好

服务器 放在 配置 台20 条回复 • 2018-03-26 17:59:44 +08:00
flyz 1
flyz 2017-04-30 07:32:02 +08:00 via Android
不要把鸡蛋放在一个篮子里面,但是也不能太分散,50 个网站一个服务器,相互备份。
bukip 2
bukip 2017-04-30 07:54:40 +08:00
那十台能均衡吗?
gouchaoer 3
gouchaoer 2017-04-30 08:10:30 +08:00 via Android
前者,省事
eabet 4
eabet 2017-04-30 08:37:44 +08:00
@flyz @bukip @gouchaoer 会想这个问题主要是有两点。
一、分为十台服务器,那 10 个系统跟服务的开销是个问题
二、当服务器配置不是瓶颈的时候,WEB 服务器软件是不是也是个瓶颈
那两者要怎么权衡
whileFalse 5
whileFalse 2017-04-30 08:42:37 +08:00
请详细描述你的需求。
“好”这个词太宽泛了。对于楼主的问题,好这个概念包括但不限于:
– 响应速度快
– 可用性高
– 避免相互影响
– 便宜
– 易维护
而楼主所给出的条件又太宽泛了。
楼主既不能指望一个简单的答案能适用所有情况,也不能指望其他人在论坛上给出针对各种可能的详尽分析。

PS:以我的经验,凡是问出这种宽泛又比较扯淡的问题,提问者需要的基本都不是问题本身的答案。
marknote 6
marknote 2017-04-30 08:43:12 +08:00 via iPhone
不能简单的看吧。
可能需要考虑资源比如 CPU 内存带宽的消耗之类的。
eabet 7
eabet 2017-04-30 08:54:15 +08:00
@whileFalse 我只是有点迷茫= =。现在遇到的问题就是不知道服务器要怎么架构。
情况是这样的,我们平台下有差不多上百个网站,程序都一样,PHP+MYSQL 只是模板不一样。
然后这些网站吧会受攻击,所以我们自建了 CDN。
之前的话,我们是把网站都放在一台机子上,但是*近服务器开始会卡卡的了,检查了一下是 MYSQL 的问题。
所以现在要对服务器进行升级了。
就遇到了这样的问题,是要升级这个服务器的配置,还是要把这些网站分开放= =
manhere 8
manhere 2017-04-30 08:56:43 +08:00 via Android
放一起,这不就是虚拟主机商做的事嘛
vebuqi 9
vebuqi 2017-04-30 08:59:46 +08:00 via Android
当然是分开放,才好做隔离,避免相互影响
Lax 10
Lax 2017-04-30 09:27:51 +08:00
把 mysql 分开就行了。汉堡可以切成几半来吃,也可以分层吃。

11
whileFalse 2017-04-30 10:25:06 +08:00
@eabet 既然是 mysql 的问题,为什么不把 mysql 独立出去呢
sholmesian 12
sholmesian 2017-04-30 10:47:05 +08:00 via iPhone
@eabet 你这个情况首先应该考虑数据库分离吧,如果是类似长期不变动的企业站内容可以考虑静态化减轻数据库压力。

单台机器出故障的概率和影响较大,根据情况不妨考虑采用类似均衡负载的架构设置前端机,按照网站重要程度/资源占用率/受攻击概率/是否新上线等情况分等级设置后端机提高可用性,代价是初始化和管理相对繁琐一些。
eabet 13
eabet 2017-04-30 12:26:59 +08:00
@whileFalse 已经在着手独立了 打算用云 SQL
@sholmesian 其实就是在纠结管理起来很麻烦= =
Showfom 14
Showfom 2017-05-03 03:53:30 +08:00
开虚拟机或者 docker
qq1242245799 15
qq1242245799 2017-05-03 16:36:35 +08:00
网站有大有小,我以前一个客户开了一台香港双核 4g 的,放了 100 多个网站,数据就有 80g,不知道怎么做到的
QQ2171775959 16
QQ2171775959 2017-05-08 09:39:17 +08:00
当然是分开放好些吧,不能把所有的鸡蛋放一个篮子里。
thinkxen 17
thinkxen 2017-05-15 22:03:09 +08:00
100 个网站放一个服务器足够了~~~如果资金充裕,当然是分别放不同机房不同的线路*好了~~~
scofieldpeng 18
scofieldpeng 2017-09-13 23:07:33 +08:00
无意看到这个 4 个月之前的,我司有 2w 多个客户站点,我用了不到 10 台千万云的屌丝机依旧抗,基本也是秒开,图片那些扔 cdn, 实际上每个站点带宽也很小,做好静态化和缓存,基本没问题,对于攻击,前端架带你负载均衡跑,挂掉一个马上换一个
chinaglwo 19
chinaglwo 2017-10-18 17:35:54 +08:00
100 个网站还真不多,一个高配服务器够了的,也省事,管理也是一种*大的成本。现在都隐藏服务器 IP,前端加 cdn 或者负载均衡或 waf。当然,一定要做好异机备份。

要知道,你如果弄 10 台低配置机器,每台放 10 个网站,你能保证出现问题的时候,一台机器放 20 个网站或者更多,能否跑得动?

考虑阿里云么,可以私信我,走我的渠道,在官网下单购买,有优惠。
fengyu110122 20
fengyu110122 2018-03-26 17:59:44 +08:00
服务器服务器商靠谱,并且不打算做站群的话,放一台方便些,可用购买快照备份,加服务器配置可用对所有网站生效。
要做站群或者想利于 SEO 的话,建议多个服务器存放。但是对其备份和管理难度就相对高一些。

参考 帝通科技

阿里国际悉尼服务器问题

我用的阿里云 30 美刀一年的悉尼服务器建站,响应特慢,各种方式都试了,无解,各位大佬有没有什么好的办法,请指教啊~不然只能丢一旁用腾讯云的去了。

美刀 悉尼 服务器 指教10 条回复 • 2017-07-22 14:07:26 +08:00
isCyan 1
isCyan 2017-07-22 11:18:24 +08:00 via Android
好办法?买张去悉尼的机票。
V 站真是水成太平洋了。
TtiGeR 2
TtiGeR 2017-07-22 11:21:04 +08:00 via iPhone
@isCyan 我在悉尼… 阿里云真的很慢
ivmm 3
ivmm 2017-07-22 11:27:16 +08:00
你是东南亚、澳洲访问悉尼,还是大陆访问悉尼?
ahean 4
ahean 2017-07-22 13:32:54 +08:00
@isCyan 伤不起啊老哥
ahean 5
ahean 2017-07-22 13:34:31 +08:00
@ivmm 大陆访问悉尼,网站跟被攻击了似的,特别慢,买的时候还在想 50M 的服务器,做网站应该挺好的吧,事实是我错了。
privil 6
privil 2017-07-22 13:36:43 +08:00
……你知道悉尼在哪么,物理意义上
ivmm 7
ivmm 2017-07-22 13:41:01 +08:00
@ahean

大陆访问悉尼机房是全球绕路的,并不像新加坡、香港、日本、硅谷走的是 CN2。

悉尼机房只推荐服务:东南亚和澳洲用户。

大陆用户推荐:新加坡,整体资费*便宜
akwIX 8
akwIX 2017-07-22 13:53:17 +08:00 via Android
@ivmm 阿里只有新加坡和香港是走 cn2 的,请勿误导
Zeroiku 9
Zeroiku 2017-07-22 14:06:15 +08:00 via iPhone
土澳土澳啊,
Zeroiku 10
Zeroiku 2017-07-22 14:07:26 +08:00 via iPhone
我一朋友澳洲留學聯機都會偶爾卡,有時雷電一來直接斷你網⋯

变量的声明

变量的声明
变量(variable)是Python语言中一个非常重要的概念。变量的主要作用就是为Python程序中的某个值起一个名字。类似于“张三”、“李四”、“王二麻子”一样的人名,便于记忆。
在Python语言中,声明变量的同时需要为其赋值,毕竟不代表任何值的变量毫无意义,Python语言中也不允许有这样的变量。
声明一个变量也非常简单,语法结构如下:
variable_name = variable_value
1
等号(=)左侧是变量名,右侧是变量值,赋完值后,Python编译器会自动识别变量的类型。
注意:变量不能随便起名,必须符合一定的规则。变量名通常包含字母、数字和下划线(_),变量名不能以数字开头。例如,value315是一个合法的变量名,而315value是错误的变量名。
下面的代码声明了多个变量,这些变量的数据类型包括整数、字符串、布尔和浮点数。*后输出这些变量的值。
”’
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
”’
x = 20                  # 声明整数类型变量
y = 40                  # 声明整数类型变量
s = “I love python”  # 声明字符串类型变量
flag = True              # 声明布尔类型变量
u = 30.4                # 声明浮点类型变量
print(flag)              # 输出flag变量的值
print(x + y)            # 输出x和y的和
print(s)                # 输出s变量的值
print(u)                # 输出u变量的值
程序运行结果
True
60
I love python
30.4

列表推导式详解

列表推导式详解

我们经常需要这样处理一个列表:把一个列表里面的每个元素, 经过相同的处理 ,生成另一个列表。

比如:一个列表1,里面都是数字,我们需要生成一个新的列表B,依次存放列表A中每个元素的平方

怎么办?

当然可以用for循环处理,像这样

list1 = [1,2,3,4,5,6]
list2 = []
for num in list1:
    list2.append(num*num)

 

Python还有更方便的语法,可以这样写

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
list1 = [1,2,3,4,5,6]
list2 = [num**2 for num in list1]

 

这种写法,通常叫做 列表推导式 。

就是把一个列表里面的每个元素经过简单的处理生成另一个列表的操作。

其中 for 前面的部分,就是要对取出的元素进行的处理操作, 上面的例子是计算平方。

如果我们 得到的 list1 里面每个元素的 立方呢?

对了,就可以这样

list1 = [1,2,3,4,5,6]
list2 = [num**3 for num in list1]

异常处理

异常处理

有时候我们在写程序的时候会出现错误或者异常,导致程序终止,如下这个例子:

#!/usr/bin/env python
a = 2/0
print(a)

 

结果提示如下错误:

Traceback (most recent call last):
  File "002.py", line 2, in <module>
    a = 2/0
ZeroDivisionError: integer division or modulo by zero

 

上面提示被除数不能为0,从而导致程序运行中断,为了能够让程序正常执行,我们可以添加tey…except…语句:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
try:
    a = 2/0
    print(a)
except Exception as e:
    print("除数不能为0")
    #raise e  # 把异常抛出来
finally:
    print("无论发生什么情况,都执行此步。")

 

结果:

除数不能为0
无论发生什么情况,都执行此步。

 

上面如果加上了raise e,则会把异常信息打印出来:ZeroDivisionError: integer division or modulo by zero。其中except部分是对错误信息进行处理,finally是不管之前有没有异常,都会执行此步骤。