zoukankan      html  css  js  c++  java
  • Python基础语法

    Python中用#进行注释。 三单引号既是多行字符串,又可以作为注释。

    0b0B开头表示二进制,0o0O表示八进制,0x0X表示十六进制。

    浮点数的取值范围约为(-10^{308})(10^{308}),精度数量级为(10^{-16})。浮点数间的运算存在不确定尾数。

    复数的定义:直接把j接在虚部的数字的后面,如:

    z = 1e0 + 2e0j
    

    用z.real和z.imag调用实部和虚部。

    round(f, i)表示对浮点数(f)四舍五入截取小数点后(i)位。(i可以省略,默认为0)

    如果(a^b)的结果很大以至于程序不能运算,但是我们只需要对一个数取余的结果的话,可以用pow(a, b, c)计算(a^b mod c)

    max(x1, x2, ..., xn)求最大值,min同理。

    int()float()可以强制转换字符串。

    complex()可以强制转换为复数。

    print会自动打印一个 ,如果无需换行,可以用end来指定结尾:

    **表示乘方,//表示整除。

    Python中没有自加自减操作。

    常用逻辑语句:andornotTureFlase

    if用法:

    if Co1:
    	Ex1
    	Ex2
    elif Co2:
        Ex3
    else:
    	Ex4
    

    while用法:

    while Co:
        Ex1
    else:
        Ex2
    

    (如果循环没有因break退出,则执行else后的语句)

    for用法:

    for i in range(1, 5):
    	Ex1
    else:
    	Ex2(若从循环内部break则不会执行)
    

    此处range(1, 5)生成的是一个1到 4 的数字列表,而上面for中的range可以用其他列表代替。

    另外,遍历字符串s中的每个字符可以用for c in s

    定义二/多维数组:

    dp = [[0 for i in range(n)] for j in range(m)]
    

    os.sep:该系统下分隔符是\还是/还是':'。

    异常处理:

    try:
    	<Block 1>
    except:
    	<Block 2>
    else:
    	<Block 3>
    finally:
    	<Block 4>
    

    如果<Block 1>发生错误,则会执行<Block 2>,否则执行<Block 3>;无论如何都会执行<Block 4>。

    函数

    函数定义方式:

    def F(a, b, c):
        Ex..;
    
    F(a, b, c)
    

    在函数中调用全局变量需用global声明,如:

    x = 50
    
    def F():
        global x
        print(x)
    
    F()
    

    在函数中,如果没有对某个组合数据类型的变量进行了初始化(比如C=[]),那么认为它是全局变量。

    函数的参数可以像C++一样地赋予一个默认值,如:

    def func(a, b=5, c=10):
    print('a is', a, 'and b is', b, 'and c is', c)
    func(3, 7)
    func(25, c=24)
    func(c=50, a=100)
    

    输出结果为:

    a is 3 and b is 7 and c is 10
    a is 25 and b is 5 and c is 24
    a is 100 and b is 5 and c is 50
    

    注意:可选参数必须放在非可选参数后面。

    函数参数前加一个星号表示元组,加两个星号表示字典。

    如:

    def fact(n, *b):
    	s = 1
    	for i in range(1, n + 1):
    		s *= i
    	for item in b:
    		s *= item
    	return s
    print(fact(10, 3, 5, 8))
    

    同一个函数内的return值的类型可以不一样。

    函数的return值可以有多个、用逗号隔开,此时返回类型为元组。

    lambda函数

    格式:

    <函数名> = lambda <参数> : <表达式>
    

    例如:

    f = lambda x, y : x + y
    print(f(10, 15))
    

    输出为25

    列表(List)

    用法:

    a.clear() #删除所有元素
    a = [1, 2, 3] #初始化
    a.append(4) #在后方插入
    n = len(a) #求长度
    a.sort() #排序
    b = a.copy() #复制
    a.insert(1,2) #在位置1插入2
    a.pop(1) #将位置1处元素取出并删除
    a.remove(1) #将第一个为1的元素删除
    a.reverse() #反转
    mx = max(a) #最值
    cnt = a.count(2) #统计出现次数
    for i in a:
    	print(i)
    print(a[0]) #调用
    del a[0] #删除
    

    此外,List还支持innot in判断,用加号连接,用乘号复制。

    s.index(x)s.index(x,i,j)返回sij中第一次出现x的位置。

    map(<函数名>,一个或多个序列)表示对序列中的每一个元素执行函数,python2返回新列表,python3返回新列表的迭代器

    python3例子:

    map(lambda x: x ** 2, [1, 2, 3, 4, 5])
    map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    #结果为[3, 7, 11, 15, 19]
    

    元组(Tuple)

    定义时用()括起来,中间用逗号隔开。(()可省略但不推荐)
    元组和字符串一样不能被修改。
    例:

    a = (1, 2, 3);
    b = (a, 4, 5, 6);
    c = (a, b, 7, 8, 9)
    print(a[0], a[1], a[2])
    print(b[0], b[0][0], b[1], b[2], b[3])
    print(c[0], c[0][0], c[1], c[2], c[3], c[4])
    

    输出结果为:

    1 2 3
    (1, 2, 3) 1 4 5 6
    (1, 2, 3) 1 ((1, 2, 3), 4, 5, 6) 7 8 9
    

    (列表也可以类似地嵌套使用)
    元组也可以通过len来获取长度,[]来获取下标。

    字典(Dictionary)

    相当于std::map,但是不会进行排序。用d = {key : value1 , key2 : value2}的形式定义。
    例:

    no.clear();
    no = {
    	"Alice" : 1,
    	"Bob" : 2
    }
    print(no["Bob"])
    del no["Bob"]
    print(len(no))
    for name, num in no.items():
    	print(name, num)
    no["Cindy"] = 3
    if "Cindy" in no:
    	print(no["Cindy"])
    no.keys() #所有键信息
    no.values() #所有值信息(它们不是list类型,但是可以用for遍历)
    no.items() #所有键值对信息
    

    d.get(k,<default>):如果键k存在,则返回对应值,否则返回<default>

    d.pop(k,<default>):如果键k存在,则取出对应值,否则返回<default>

    d.popitem():随机取出一个键值对,以元组形式返回。

    (对于p = {},我们调用其类型type(p),返回的是dist而不是set)

    对于以上的数据类型(包括字符串),都可以用[]进行下标调用。
    下标0表示第1个元素,下标1表示第二个元素,以此类推。
    负下标表示倒数第几个元素。
    [a:b]表示元素a到元素b前一个元素间的所有元素(切片(Slicing)操作)。
    字符串进行切片操作得到的还是字符串。
    a省略,则表示从第一个元素开始,若b省略,则表示一直到最后一个元素。
    例:

    shoplist = ['apple', 'mango', 'carrot', 'banana']
    print('Item 1 to 3 is', shoplist[1:3])
    print('Item 2 to end is', shoplist[2:])
    print('Item 1 to -1 is', shoplist[1:-1])
    print('Item start to end is', shoplist[:])
    

    另外可以在后面再加一个:和数字表示间隔,比如:

    List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    print(List[3 : 20 : 2])
    

    输出:

    [4, 6, 8, 10, 12, 14, 16, 18, 20]
    

    如果间隔是负数,则表示倒过来排,比如"abcd"[::-1]相当于"dcba"

    集合(Set)

    和STL不同,Python的Set是无序的。

    集合用{}表示,用{}set()建立,用set()建立空集合。
    (定义时集合中元素可以重复,会自动去重)

    若定义为B = set("pypy123"),那么相当于B = {'1', 'p', '2', '3', 'y'}

    运算符|取并,&取交,^取两集合中的非相同元素,S-T表示在S中但不在T中的元素。
    >,<,>=,<=判断子集和包含关系。

    S.add(x):增加元素

    S.discard(x):如果xS中则删除

    S.remove(x):如果xS中则删除,如果不在则报错

    S.clear(x):移除所有元素

    S.pop():随机取出一个元素,若为空则报错

    S.copy():返回一个副本

    len(S):元素个数

    x in S:是否包含

    x not in S:是否不包含

    set(p):将其它类型变量转成set

    set可作为for循环的列表。

    例:

    try:
        while True:
            print(A.pop(), end = "")
    except:
        pass
    

    注意:直接用=将一个对象赋给另一个对象时,只是引用,如果对一个进行修改,那么另一个也会随之修改。如果要使该对象可以独立修改,则需要用切片操作进行赋值。

    文件操作

    打开文件:<变量名>=open(<文件名>,<打开模式>)

    其中,文件名为路径(既可以是绝对路径也可以是相对路径)和名称,Windows下路径用隔开,但是需要转义即写成\,为了方便一般写成/

    打开模式:

    'r':只读,若不存在则返回FileNotFoundError(默认)

    'w':文件不存在则创建,存在则覆盖

    'x':文件不存在则创建,存在则返回FileNotFoundError

    'a':文件不存在则创建,存在则在最后追加内容

    'b':二进制文件模式

    't':文本文件模式(默认)

    'u+'u替换为r,w,x,a中的一个):在原功能基础上增加读写功能

    例:a = open('a.in','rt')(即默认)

    文件关闭:<变量名>.close()

    读取方式:

    <f>.read(size=-1):读入全部内容,如果给出参数size,则读入前size长度。

    <f>.readline(size=-1):读入一行内容,如果给出参数size,则读入该行前size长度。

    <f>.readlines(hint=-1):读入所有行,以每行内容(包括换行符)为元素形成列表,如果给出参数hint,则读入前hint行。

    遍历行:

    fo = open("a.txt", "r");
    for line in fo:
        print(line);
    

    写入方式:

    <f>.write(s):写入一个字符串或字节流

    <f>.writelines(s):将s中的元素无分隔符拼接后输出

    <f>.seek(offset):改变指针位置,offset含义:0——文件开头;1——当前位置;2——文件结尾。

    字符串

    Python中字符串是不可修改的。

    如果字符串中只有单引号,那么外面用双引号;如果只有双引号,那么外面用单引号;如果都有,那么就用三个单引号来表示。

    str()将数字、列表等类型转化为字符串,用len()求字符串长度。

    hex(x)将数字转化为十六进制的字符串('0x'开头),oct转化为八进制。

    chr(u)将Unicode码转化为对应字符;ord(x)将字符转化为Unicode编码。

    eval()将表达式的字符串转化为计算结果。

    s.input('Enter Something: ')输入的是整行。

    字符串用加号连接;字符串乘以一个数即将其重复并接在一起。

    可以用 来指定多行字符,如:

    'This is the first line
    This is the second line'
    

    另外,在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继续,但不会添加新的一行。

    表示回退, 表示换行(光标移动到下一行行首), 表示回车(光标移动到本行行首)。

    字符串常用函数:
    str.lower()将字母全部变成小写;str.upper()将字母全部变成大写。
    str.split(str1):将str1看作分隔符,将str分成几个字符串,返回列表。
    str.count(str1):返回str1str中的出现次数。
    str.replace(old, new):返回将str中的old替换成new的结果。
    str.center(width[,fillchar]):将strfillchar扩充至width并使str居中。
    str.strip(chars):在str的首尾去掉chars中列出的字符。
    str.startswith(str1):返回str是否以str1开头。
    str1 in str:返回str是否包含str1
    str.find(str1):返回str1str中的位置,如果没有返回-1。
    str1.join(str):将分隔符str1插入str的每一个空隙。

    我们可以在引号之前加一个r或者R来指定一个原始字符串(引号里的就是字符串的内容,无需转义),如:

    r"Newlines are indicated by 
    "
    

    format格式化:
    可以用编号或者命名来指定格式化的位置,例:

    age = 20
    name = 'Swaroop'
    print('{0} was {1} years old when he wrote this book'.format(name, age))
    

    或者:

    print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
    

    关于对格式化的内容进行填充,保留小数等操作:
    输出1/3保留四位小数,用_填充至11位使小数居中,且用,作为千位分隔符:

    print("{0:_^14,.4f}".format(100000. / 3))
    

    输出:

    _33,333.3333__
    

    ^表示居中,<表示居左,>表示居右)
    (加上逗号表示千位分割,没有需要可直接去掉)
    (可以看作跟C的区别就是前面可以选择用什么来填充和填充的格式)
    .之后的数字既可以表示保留小数也可以表示字符串最大输出长度)
    关于类型:
    (f表示浮点数,d表示整数,c表示字符)
    b表示二进制,o表示八进制,x表示小写的十六进制,X表示大写的十六进制;
    e表示使用e的科学计数法,E表示使用E的科学计数法,%表示以百分数的形式表示浮点数。

    random库

    import random
    

    seed(a = None):使用a作为随机数种子,默认为当前系统时间
    random():得到一个([0.0,1.0))之间的随机小数
    randint(a, b):生成([a,b])之间的随机整数
    randrange(a, b, c):范围为([a, b)),步长为(c)
    getrandbits(k):随机一个k比特长的随机整数
    uniform(a, b):生成([a, b])之间的随机小数
    choice(seq):在列表中随机选取
    shuffle(seq):将列表随机打乱

    time库

    首先

    import time
    

    函数:

    time():获取当前时间戳(从1970年1月1日0:00开始过了多少秒)(浮点数)
    ctime():返回当前时间的易读方式的字符串,如'Fri Jan 26 12:11:16 2018'
    gmtime():返回一个特殊的时间格式:time.gmtime() = time.struct_time(tm_year = 2018, tm_mon = 1, tm_mday = 26, tm_hour = 4, tm_min = 11, tm_sec = 16, tm_wday = 4, tm_yday = 26, tm_isdst = 0)

    strftime(tpl, ts):用于格式化输出结果,其中tpl为模板,ts为struct_time类型,用法示例:

    t = time.gmtime()
    time.strftime("%Y-%m-%d %H:%M:%S", t)
    

    得到字符串:'2018-01-26 12:55:20'

    time.strptime(str, tpl)time.strftime(tpl, ts)的反操作,即反格式化形成内部时间,示例:

    str = '2018-01-26 12:55:20'
    time.strptime(str, "%Y-%m-%d %H:%M:%S")
    

    perf_counter()返回的是一个非常精准的时间计数值,但是计时起点不确定,只有差值才有意义。
    sleep(x):休眠x秒。

    附格式化对应表:

    格式化字符串 说明 示例
    %Y 年份 1999
    %m 月份 01
    %B 月份名称 April
    %b 月份缩写 Apr
    %d 日期 01
    %A 星期 Monday
    %a 星期缩写 Mon
    %H 24小时制小时 17
    %I 12小时制小时 5
    %p 上/下午 AM
    %M 分钟 00
    %S 00

    turtle库

    我们可以用turtle库进行简单绘图。

    import turtle
    

    初始化窗口(不是必须的):

    turtle.setup(width, height, startx, starty)
    

    (分别表示窗口的宽度,高度,以及左上角的坐标(前一个是横坐标,后一个是纵坐标))

    绝对坐标指以中心为原点的平面直角坐标。
    我们可以通过turtle.goto(x, y)来使画笔从原来的位置走到指定坐标并留下轨迹。

    相对位置指以画笔当前正对方向为前方的相对位置。
    我们用turtle.circle(r, angle)绘制一个圆心在当前方向的边的、半径为r的、角度为angle的圆弧(angle可省略,默认为一周)(如果需要向右侧画圆,将半径改为负数即可);用turtle.bk(d)表示后退d;用turtle.fd(d)表示前进d

    gotofdbk都不会改变画笔的正对方向,circle可以。

    另外,我们可以用turtle.seth(angle)turtle.setheading(angle)直接指定当前正对方向的绝对角度;也可以用turtle.left(angle)turtle.right(angle)来改变一个相对角度。

    turtle.speed(v)用于调节画笔的移动速度,范围为0到10的整数。
    turtle.penup()表示抬起画笔,之后的轨迹不在显现。
    turtle.pendown()则表示画笔落下,之后的轨迹将会显现。
    turtle.pensize(w)turtle.width(w)可调整画笔宽度。
    turtle.pencolor(color)可修改画笔颜色,其中·color有三种形式:

    • 颜色字符串,比如turtle.pencolor("purple")
    • RGB值(小数),如turtle.pencolor(0.1, 0.2, 0.3)
    • RGB值(元组),如turtle.pencolor((0.1, 0.2, 0.3))

    turtle默认用RGB的小数形式来表示颜色,但是可以调整表示方式:

    turtle.colormode(1.0)
    turtle.colormode(255)
    

    turtle.dot(d)用于绘制直径d的实心圆。

    turtle.home()用于返回原点且将方向设为向右。

    如果不希望绘图之后自动退出,则写一句turtle.done()即可。

    turtle.write('汉字', font = ("Arial", 18, normal))可绘制汉字。

    PyInstaller

    PyInstaller用于将.py文件转化为可执行文件。

    网站:http://www.pyinstaller.org

    安装:在cmd命令行中输入pip install pyinstaller

    使用:在cmd命令行中输入pyinstaller -F <文件名.py>,会生成__pycache,build,dist三个文件夹,生成文件为dist中的可执行文件,前两个文件夹可以将其删除。

    其它参数:

    -h:帮助

    --clean:清理临时文件

    -i <图标文件名.ico>:指定使用图标文件

    其它第三方库

    第三方库的安装方法

    安装:pip install <库名>

    下载但不安装:pip download <库名>

    卸载:pip uninstall <库名>

    更新:pip install -U <库名>

    查看详细信息:pip show <库名>

    搜索:pip search <关键词>

    已安装列表:pip list

    文件安装:如在https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud上下载编译后的文件,然后pip install <文件名>即可。

    jieba库

    jieba库是中文分词第三方库(利用词库将文本进行分词以得到一个个词语)。

    安装:在cmd命令行中输入pip install jieba

    使用:

    • jieba.lcut(s):精确模式,返回分词结果(列表)
    • jieba.lcut(s,cut_all=True):全模式,返回所有可能的词语,存在冗余
    • jieba.lcut_for_search(s):搜索引擎模式,在精确模的结果上进一步分词,存在冗余

    wordcloud库

    用于生成词云,需要安装Microsoft Visual C++ 14.0(也可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloudshang 下载编译后的版本)。

    w = wordcloud.WordCloud()
    w.generate(txt) #加载文本txt
    w.to_file(filename) #输出图像文件
    

    设置大小:

    w = wordcloud.WordCloud(width=600)
    w = wordcloud.WordCloud(height=400)
    w = wordcloud.WordCloud(min_font_size=10)
    w = wordcloud.WordCloud(max_font_size=20)
    w = wordcloud.WordCloud(font_step=2) #步进间隔
    w = wordcloud.WordCloud(font_path="msyh.ttc") #字体
    w = wordcloud.WordCloud(max_words=200) #最大单词数
    w = wordcloud.WordCloud(stop_words={"ban_word"}) #禁词
    w = wordcloud.WordCloud(background_color="white") #背景颜色(默认黑色)
    

    其他库

    Numpy:数据分析

    Pandas:数据分析高层次应用库

    SciPy:数学、科学和工程计算库

    Matplotlib:二维数据可视化功能库

    Seaborn:统计类数据可视化功能库

    Mayavi:三维科学数据可视化功能库

    PyPDF2:用于处理PDF文件的工具集

    NLTK:自然语言文本处理

    Python-docx:创建或更新.doc或.docx文件

    Scikit-learn:机器学习方法工具库

    TensorFlow:机器学习框架

    MXNet:基于神经网络的深度学习计算框架

    Requests:最友好的网络爬虫功能库

    Scrapy:优秀的网络爬虫构架

    pyspider:Web页面爬取系统

    Beautiful Soup(beautifulsoup4或bs4):HTML和XML的解析库,需预先了解HTML和XML的设计原理,与网络爬虫库配合使用

    Re:正则表达式解析和处理功能库(Re是标准库,无需安装)

    Python-Goose:提取文章类型的Web页面的功能库

    Django:略微复杂的Web应用框架

    Pyramid:规模适中的Web应用框架

    Flask:Web应用开发微框架

    WeRoBot:解析、反馈微信消息

    aip:百度AI开放平台接口

    MyQR:生成二维码

    PyQt5:Qt开发框架的Python接口

    wxPython:跨平台GUI开发框架

    PyGObject:使用GTK+(一种跨平台的用户图形界面GUI框架)开发GUI的功能库

    PyGame:基于SDL的简单游戏开发功能库

    Panda3D:开源、跨平台的3D渲染和游戏开发库(有C++和Python两种接口)

    cocos2d:构建2D游戏和图形界面交互式应用的框架

    Quads:迭代艺术图形

    ascii_art:ASCII艺术库

  • 相关阅读:
    【Luogu】P2491消防(单调队列)
    【Luogu】P2824排序(二分答案+线段树排序)
    2-k8s笔记-Kubernetes安装配置指南
    1-k8s笔记-Kubernetes入门
    22-MySQL DBA笔记-其他产品的选择
    21-MySQL DBA笔记-高可用性
    20-MySQL DBA笔记-可扩展的架构
    19-MySQL DBA笔记-操作系统、硬件、网络的优化
    18-MySQL DBA笔记-MySQL Server调优
    17-MySQL DBA笔记-应用程序调优
  • 原文地址:https://www.cnblogs.com/Hany01/p/python-note.html
Copyright © 2011-2022 走看看