Python 基础语法

常用语句

1.print():输出语句,默认输出的结果分隔符是换行,如果想设置结尾分隔符,则设置end参数,例如:print(i,end='')(代表用空字符串隔开);如果想要设置多个对象输出的分隔符(默认是空格),则设置sep参数,举例:print(1,2,sep='-')(结果输出1-2);如果想要将内容重定向输出,则可以设置file参数,举例:

with open("aaa.txt", "w") as f:
    print("aaa", file=f)    //将aaa输出到文件当中

2.input():输入语句,默认为str型,可以做好强制转型,举例:

>>> a = input("please input:")
please input:1  #手动输入1
>>> a
'1'
>>> a = int(input("please input:"))    #强转int型

如果希望输入的内容不被看见(比如密码),那么就可以用getpass模块下的getpass()函数,举例:

>>> import getpass
>>> psd = getpass.getpass("password>>")
password>>
>>> psd
'123456'
#输入了123456没显示

3.python中也有breakcontinue
4.a,b = 1,2+3:a等于逗号左边的值也就是1,b等于括号右边的也就是5
5.a = b = 1:a、b都赋值为1
6.交换语句:a, b = b, a,此时就会把a和b的值对调,别的语言基本要个中间变量,python不用
注:

2.运算操作符

(1)基本的=-*/%都有,而且同样有+=-=*=/=,但是/和C语言中的不太一样,比如这里3/2会变成1.5,也就是会像正常计算器那样算,而不会自动取整。如果想自动取整可以用//,这时会去掉小数部分,且不论是整数运算还是浮点数运算,举例:

>>> 3//2
1
>>> 3.1//2    #即使浮点数运算也会强制取整
1.0

(2)幂运算操作符**,例如:3**4=81,但是要注意优先级问题,其优先级比左边的内容高,比右边的低,比如:-3**2=-9,此时运算是这样:-(3**2),又如3**-2=0.11111111,此时运算是这样:3**(-2)
(3)多个变量同时赋值,例如:a=b=c=1
(4)位运算:|表示或,&表示与(还有or/and表示与和或,相当于原来的||/&&,即只要第一个条件为真/假,则可不用判断第二个条件,直接出结果),^在表示异或,~表示取反(01对调,相当于-x-1),<<左移,>>右移,这些位运算对于十进制的数会先转成2进制再进行运算,然后再转回十进制,举例:

>>> 5 | 3    #0101 | 0011
7  #0111
>>> 5 & 3
1  #0001
>>> 5^3
6  #0110
>>> ~5  #-5-1
-6  #-1010
>>> 5 << 2  #5*2*2
20  #0001 0100,高位丢弃,低位补0
>>> 5 >> 1  #5/2
2  #0010,低位丢弃,高位补0

注:
Python里没有++--

3.逻辑运算符

(1)TrueFalse(记住首字母大写)

(2)==/is:前者判断值是否相等,后者判断地址是否相等,所以如果后者符合则前者也一定符合,举例:

>>> a = 1
>>> b = 1
>>> id(a) == id(b)
True
#地址相等
>>> a == b
True
>>> a is b
True
>>> c = [1]
>>> d = [1]
>>> id(c) == id(d)
False
#地址不等,但值相等
>>> c == d
True
>>> c is d
False

(3)not:去相反逻辑符,比如:not False就是True,not 5就是True,因为非0的都是True,还有not is

(4)在Python里还可以3<4<5,结果是True

4.格式化(format)

针对字符串的概念,对字符串当中要格式化的地方用{}包住,有位置记录(如:{0},{1})和关键字记录(自定义名称,如{a},{first})

  • 位置格式化
    例如""{} love {}.{}".format(*["I","you","com"])就会变成:'I love you.com',也可以自定义传入位置,如:"{1} love {0}.{2}".format(*["I","you","com"])就是'you love I.com'
  • 关键字格式化
    例如:"{a} love {b}.{c}".format(a="I",b="you",c="com"),结果为:'I love you.com'
    注:
    两种格式化能一起用,但位置格式化只能在关键字格式化前面用,如果前面有关键字格式化了,后面就不能位置格式化,例如:"{a} love {1}.{2}".format(a="I","you","com")是不可以的;还有如果想输出像'{0}'这样的字符,可以在这外面再来一层{},比如:"{{0}} love {1}.{2}".format("I","you","com"),结果就是'{0} love you.com'
  • 字符格式化
    (此时不用format,直接在要格式化的字符和格式化后的内容间用%隔开,参考下面例子就知道了)
    (1)%d:整数格式化(非整数会自动转成整数),如果要要显示正数,可以前面加+号,前面加数字可以控制字符串长度,前面加0用于补全(默认右对齐,如果左对齐就不会给0补全,加-号左对齐),举例:
>>> "%d" % 5.1
'5'    #自动转整数
>>> "%+d" % 5
'+5'    #前面加+号
>>> "%5d" % 5
'    5'    #字符串长度为5
>>> "%05d" % 5
'00005'  #前面用0补全
>>> "%-5d" % 5
'5    '    #加-号左对齐

(2)%f:浮点数,可指定精度,默认精确到小数点后6位,小数点前面还可以加数字,代表字符串长度,默认右对齐,前面加-是左对齐,举例:

>>> "%f" % 5.157
'5.157000'    #默认精确6位
>>> "%.2f" % 5.157
'5.16'    #精确2位
>>> "%10.2f" % 5.157
'      5.16'  #长度为10
>>> "%-10.2f" % 5.157
'5.16      '  #左对齐

(3)%c:单个字符
(4)%s:字符串
(5)%o:8进制,举例:

>>> "%o" % 8
'10'  #8进制的8就是10

(6)%x:16进制小写,还有%X为16进制大写
(7)%e:e记法,如果要大写就%E
(8)%g:自动决定用%f还是%e记法,大写用%G,举例:

>>> "%g" % 100000000
'1e+08'  #貌似7位数开始就自动用e记法
>>> "%g" % 10000
'10000'

注:
字符格式化一般用在print里,比如:print("%d 和 %f是两个格式化输出" % (num1, num2))这个时候num1和num2的值就会被传到格式化里了
注2:
在python3.6+版本,新出了f-string格式化字符串,相当于字符串和format()格式化的结合,只需要字符串前面加个f定义即可,简单易用,随便举个例感受下:

>>> a = 1
>>> f'num:0{a}2'
'num:012'
>>> b = 2
>>> f'12{a+b}'
'123'

详细参考:https://blog.csdn.net/sunxb10/article/details/81036693

5.局部变量、全局变量、非局部变量

在Python里,全局变量可以被任意地方访问,非局部变量能在局部被访问,但仅限于访问和读取值而已(列表、字典等比较特殊,一会儿会介绍),一旦要修改值的时候,将会报变量未定义的错,例如下面的例子:

a = 1  # 全局变量a
def test(b=2):  # 非局部变量b
    def test2():
        # 局部调用和修改全局、非局部变量
        print(a, b) # a和b能被正常读取
        a += 1  # 会报a没有定义的错
        b += 1  # 一样也报错

    test2()
    
test()

从上面可以知道无法在局部修改全局和非局部变量,但如果需要修改,那么只需要在该局部通过global 全局变量名nonloacal 非局部变量名关键字定义一下就可以了,举例:

a = 1  # 全局变量a
def test(b=2):  # 非局部变量b
    def test2():
        global a    # global关键字定义全局变量
        nonlocal b  # nonlocal关键字定义非局部变量
        a += 1  # 正常修改
        b += 1  # 正常修改
        print(a, b) # a和b能被正常读取

    test2()

test()

列表、字典等特殊数据的作用域问题:
前面全局、非局部的值无法在局部只赋予了读取的权限而没有修改,而列表和字典这些数据如果只是修改其内部的数据,是允许的,但如果要修改整个变量,则是不允许的,举例:

li = [1]

def test1():
    li.append(2)    # 修改列表的内部数据是允许的
    print(li)   # 将全局变量li的值修改成了[1, 2]

def test2():
    li += [2]   # 修改整个表是不允许的,会报错,此时需要提前用global关键字定义变量

test1()
print(li)   # 结果是[1, 2]
test2()

global使用原因:https://www.cnblogs.com/yanfengt/p/6305542.html
global/nonlocal区别:https://www.cnblogs.com/huwt/p/11185516.html
更多变量作用域和闭包问题参考:https://www.cnblogs.com/Lin-Yi/p/7305364.html

6.判断语句
  • 第一种
if 条件:
    (满足条件的在下一行用缩进)
else :
    (不满足条件的在下一行用缩进)
  • 第二种
if 条件:
    (满足条件的在下一行用缩进)
elif :
    (不满足,判断下个条件,满足条件的在下一行用缩进)
else :
    (不满足条件的在下一行用缩进)
  • 第三种(三元操作符)
value = x if x < y else y

意思是如果x<y,则x赋值给value,否则y赋值给value,举例:

>>> a = 2
>>> 1 if a else 0
1

注:
Python中条件必须是逻辑语句,不能是赋值语句之类的,比如:if x=1在C中可能不会报错,但在这里会报错

7.循环语句
  • 第一种:while
while 条件 :
    (满足条件的在下一行用缩进)
  • 第二种:for
for 目标 in 表达式 :
    (循环语句)

for举例1

value = 'abcde'
for i in value :
    print(i,end=' ')
输出结果:a b c d e 

解释:循环当中依次把a、b、c、d、e赋值给i,并输出。比如第一次循环时,i为'a',到第二次循环时i为'b'...

  • for举例2
member = ['aaa','bbbb','ccccc']
for each in member :
    print(each, len(each))
输出结果:
aaa 3
bbbb 4
ccccc 5

解释:依次把列表每个值赋值给each,并输出

  • for举例3
    前面只是从一个列表之类对象里取出每个值,但是如果我们想要获取其对应的下标的话,可以通过enumerate()函数实现,举例:
member = ['aaa','bbbb','ccccc']
for i, each in enumerate(member):
    print(i, each)
输出结果:
0 aaa
1 bbbb
2 ccccc
  • for举例4
    前面都是针对单个列表之类的对象进行循环遍历,如果想同时对多个呢?可以通过,zip()函数将多个列表结合成一个,举例:
member = ['aaa','bbbb','ccccc']
index = ['a', 'b', 'c']
name = ['x', 'y', 'z']
for i, n, each in zip(index, name, member):
    print(i, n, each)
输出结果:
a x aaa
b y bbbb
c z ccccc
  • for举例5
    举例4里只能同时对多个列表进行一次遍历,如果希望的是依次对这些表实现循环呢?可以通过itertools模块下product函数实现,举例:
from itertools import product
index = ['a', 'b', 'c']
name = ['x', 'y', 'z']
for i, n in product(index, name):
    print(i, n)
输出结果:
a x
a y
a z
b x
b y
b z
c x
c y
c z
  • for举例6
    假如循环遍历时我只想读取前3个中的第奇数个的话,则可以用itertools下的islice()函数实现,举例:
from itertools import islice
member = ['aaa','bbbb','ccccc', 'dddddd']
for each in islice(member, 0, 3, 2):
    print(each)

输出结果:
aaa
ccccc

islice()函数类似列表的切片操作,传入的后三个参数分别为起始位、结束位的后一位,步长,上面的用切片替代也是一样的,举例:

for each in member[:3:2]:
    print(each)
# 结果一样
8.循环判断
for 目标 in 表达式 :
    if 条件:
        …
        break
    else :
        …

意思是执行for语句,循环进行判断,如果符合条件时就进入if语句,最后执行break退出,如果都不符合条件,那么就会执行else语句。但记住循环判断的else是前面的循环完了就会执行else,所以如果不加break,那么最后一定会执行else里的内容。举例:

for i in range(0,10):
    if  i > 5:
        print("existing")
    else:
        print("Nothing")
结果为:
existing
existing
existing
existing
Nothing     #没有break,最后执行结束会执行这句
9.推导式
  • [X for x in [列表]]
    链表推导式,第一个X是表达式,该语法将列表(集合、字典等也都可以)内容按表达式方式计算后生成一个新的列表(迭代器),举例:
>>> [3*x for x in [1,2,3]]
[3, 6, 9]

还可以在列表后面加条件,举例:

>>> [3*x for x in [1,2,3,4,5] if x>3]
[12, 15]

还可以有很多种变化,举例:

>>> [(x,x+1) for x in range(3)]
[(0, 1), (1, 2), (2, 3)]

举例删除一个列表的所有字符串的空格:

>>> [ x.strip() for x in [' ab','bc ',' sf ','s g'] ]
['ab', 'bc', 'sf', 's g']

有时我们要一定数量的某个常量,比如要10个0的列表,那么就可以:

>>> [0 for x in range(10)]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

还有更好的用法,比如可以通过链表推导式在多线程函数中使用,当函数需要一堆不同参数传入时,可以通过其实现:

>>> def abc(i):
    return i

>>> a = [abc(i) for i in range(10)]  #通过链表推导式将参数依次传入至函数当中,这在后面的多线程、协程爬虫等里面传地址很好用
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • {X:Y for x in [列表/...]}
    字典推导式,举例:
>>> {x : x%2==0 for x in range(5)}
{0: True, 1: False, 2: True, 3: False, 4: True}  #返回0-5能否被2整除的字典

注:
还有集合推导式,举例:

>>> {x for x in [1,2,3,3,2,1,4,5,6]}
{1, 2, 3, 4, 5, 6}

注:
没有字符串推导式,并且()包着的也不是元组推导式,而是生成器推导式,举例:

>>> (x for x in [1,2,3,3,2,1,4,5,6])
<generator object <genexpr> at 0x03DF9FC0>  #生成器类型
10.断言

assert 条件,如果后面的条件正确就没事,如果错误将会程序奔溃并报错,例如:

>>> assert 3>4
Traceback (most recent call last):
  File "<pyshell#89>", line 1, in <module>
    assert 3>4
AssertionError    #提示断言错误

通过该方法可以知道错误的地方,而且也保护了后面的语句不被执行。一般用来检测某一个条件必须为真时使用。

11.返回多个值

由于函数中return执行后就结束该函数,所以如果想返回多个数就不能多次return,但是可以返回一个列表、元组或者字典,比如:return [1,2,3,4,5],也可以比如想返回两个列表就:return [list1,list2]
注:
return a,b,c这个实质上就是返回一个元组

12.with关键字

参考:https://www.jianshu.com/p/5b01fb36fd4c

13.exit()

退出,括号里可以加退出时的提示,比如:exit("the procedure is break")

14.输出彩色字体

格式:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m(即:\033[数字;m+内容+\033[0m
其中显示方式:

0    (默认值)
1    (高亮)
22   (非粗体)
4    (下划线)
24   (非下划线)
5    (闪烁)
25   (非闪烁)
7    (反显,就是前景色和背景色对调)
27   (非反显)

前景色:

30    (黑色)
31    (红色)
32    (绿色)
33    (黄色)
34    (蓝色)
35    (洋红)
36    (青色)
37    (白色)

背景色:

40    (黑色)
41    (红色)
42    (绿色)
43    (黄色)
44    (蓝色)
45    (洋红)
46    (青色)
47    (白色)

举例:

print("\033[27;34;42m这是非反显蓝色字,且背景是绿色\033[0m")
print("\033[1;31;43m这是高亮红色字,且背景是黄色\033[0m")

注:
上面的语句在idle这样的编译器当中可能无法显示效果,可以在pycharm里尝试`

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,342评论 0 2
  • PHP(一)基础语法 本来就是学习笔记,就不说废话了 参考 PHP 手册陈惠贞 , 陈俊荣.PHP 7&MySQL...
    cndaqiang阅读 1,093评论 1 1
  • Beetl2.7.16中文文档 Beetl作者:李家智 <xiandafu@126.com> 1. 什么是Beet...
    西漠阅读 2,681评论 0 0
  • 人总是会有两面,一面是善良,一面是邪恶!有时候可能都不知道自己到底是那一面,你表现出了善良一面,而别人却认为那是你...
    只想简单一点而已阅读 208评论 0 0
  • a. 懂得节制。不管是精神上身体上,过分放纵的话总有一天需要承担后果 b. 分寸感。人心远近相安,为什么别人有些事...
    艾米丽阿杰阅读 257评论 0 0