Python | Python语法基础

为什么想起学Python了?

之所以想起学学Python是有三个缘由。从时间顺序上看,首先是在10月中旬,笔者去学校招聘会走了走,发现招Python开发的挺多的,有在线教育、智慧城市等行业,基本以数据挖掘处理为主。其次是10月中旬接到了腾讯微信搜一搜后台的实习面试邀请,那边招C++和Python开发,用的是腾讯自研框架。最后也是最重要的,在11月上旬,笔者参加的电子设计大赛F题送药小车核心点在图像识别,而市面上用的比较多的OpenMV需要用Python开发。这让笔者意识到是时候该学学Python了,虽然说学好一门语言后再学第二门会很简单,但万一遇到紧急项目,总不能再花时间在语法基础上吧,项目所需要的框架也是需要学习成本的。

Python与Java?

笔者对Java比较熟练,也是以Java作为第一门语言开始学习的。有了一定开发经验后最大的感受是确实能快速上手Python,特别是面向对象那块,毕竟编程思想是可以互通的。至于以后会不会从事Python相关的开发工作,要看市场和项目需求,现阶段还是会以Java的学习为重,笔者Java还有好多好多要学的呢,Python暂时学来玩玩刷刷leetcode就好了。

参考资料

笔者Python学习主要以《Python编程:从入门到实战》这本书为主,笔记的思路参考书里的脉络。其次还有笔者一年前在慕课上看的北理的嵩天教授的Python课程。嵩天教授的课很好,最大的特点是每个版块都有完整的示例代码。但可能对新手小白不太友好,有些不常用的函数容易弄混。《Python编程:从入门到实战》更适合零基础学习,里边会提到一些互通的编程思想和Python的格式规范。

结合常用函数、方法

由于笔者有Java的编程基础,因此这里只记录Python跟Java不一样的地方以及一些易忘点和难点,重点放在Python的语法基础。对于新手朋友还是先看书为好。结合《Python常用函数、方法示例总结(API)》来看可能效果会好一些。

  • .py指出这是一个Python程序, 编辑器将使用Python 解释器运行它;
  • Python 解释器读取整个程序,确定其中每个单词含义;
  • 程序无法成功运行时,解释器会提供一个 traceback。traceback是一条记录,指出解释器尝试运行代码时,在什么地方陷入困境;
  • 在Python中,可以用 单引号双引号括起字符串;
  • Python中的转义符:
  • \n换行(光标到下行首);
  • \r回车(光标回到本行首);
  • \t制表符, \n\t表示换行并在下一行开头添加制表符;
  • \b回退;
  • Python2中,有些 print语句包含括号,有些不包含;
  • Python使用 两个乘号表示乘方,如: 3 ** 2 == 9
  • Python2中 除法 \将小数部分直接删除。Python3中保留小数。但在Python2中: 3.0 / 2 == 1.5
  • Python之禅:Python的一些编程理念。在终端输入 import this即可获取;
  • Python关键字:
    Python | Python语法基础
  • Python内置函数:

    Python | Python语法基础
    Python | Python语法基础
  • 一个列表示例: bicycles = [ 'trek', 'cannondale', 'redline']。注意 方括号逗号

  • 打印列表示例: print(bicycles)
  • 访问列表元素: bicycles[0] — > trek;
  • 访问列表倒数第x元素: bicycles[-x] — > 当x=1时输出:redline;
  • 使用 for循环遍历列表
for object in list:
    print(object)
  • 列表解析list = [num**2 for num in range(1s, 11)] —> 输出1到10的平方;
  • 遍历部分列表for object in list[firstNum: lastNum]:
  • 可以使用 list[:]的方法复制列表;
  • 元祖相关:
  • Python中将不能修改的值称为不可变的,而不可变的列表称为 元祖
  • 在编程上与列表不同之处在于其使用 ()tuple()或不使用括号;而 列表使用 []list()
  • 元组因为创建后不能修改,因此没有特殊操作;
  • 如果提出修改Python语言修改建议,需要编写Python改进提案(PEP)。 PEP 8是最古老的PEP之一,其规定了以下一些Python代码格式规范:
  • 每级缩进4个空格。需要对文本编辑器(或ide)设置tab键为4个空格;
  • Python解释器根据水平缩进解读代码,不关心垂直间距;
  • 建议每行不超过个字符;
  • 建议比较运算符两边各添加一个空格;

  • 一个集合示例: bicycles = { 'trek', 'cannondale', 'redline'}。注意 大括号逗号

  • 集合的特点是不能重复;
  • 利用集合数据去重:
s = set(list)  #利用集合无重复元素的特点去重
l = list(s)  #将集合转变回列表
  • Python在检查是否相同时考虑大小写;
  • 多数情况下,检查两个手指之间的差异更有效率
    [En]

    most of the time, it is more efficient to check the difference between two fingers.*

  • 在Python中使用 andor表示并与或,而不是 &&||
  • 检查列表是否含有特定值的语句: if(object in list),也可以用 if(object not in list)
  • Python的if语句基本结构如下(注意冒号):
if conditional_test1:    do something1elif conditional_test2:    do something2else:    do other
  • 判断列表是否为空: if list:

  • 事实上,可将任意Python对象用作字典中的值;

  • 一个 字典的示例: alien0 = {'color': 'green', 'points': 5}
  • 遍历字典for key, value in map.items():
  • 遍历字典的键for object in map.keys():for object in map:,因为遍历字典默认遍历所有的键;
  • 按顺序遍历字典所有的键: for object in sorted(map.keys()):
  • 遍历字典的值for object in map.values():
  • 遍历字典的值,剔除重复项: for object in set(map.values()):
  • 列表和词典的嵌套层数不应该太多,如果太多,可能会有更简单的解决方案

    [En]

    there should not be too many nesting levels of lists and dictionaries, if too many, there may be a simpler solution to the problem*

  • 在Python 3里使用 input()方法,而在Python 2.7里使用 raw_input()方法;

  • 循环语句: while conditional_test:
  • 可以使用 break关键字退出循环,这里的循环包括while和for循环;
  • 可以使用 continue关键字继续循环;
  • 使用循环处理列表: while object in list:

  • 没有返回值的函数定义示例:

    [En]

    example of a function definition without a return value:*

def greet_user(username, age=1):  #username没有设定默认值必须放在形参列表开头
    """显示简单问候语"""
    print("hello, " + username.title() + ", age is " + str(age))

greet_user('jesse', 18)  #位置实参
greet_user(age=18, username='jesse')  #关键字实参
greet_user('jesse')  #使用默认值age=1
  • 第二行为 文档字符串注释,描述函数是做什么的;
  • 后面为函数调用;
  • 具有普通返回值的函数定义示例:
    [En]

    example of a function definition with ordinary return values:*

def greet_user(username, age=1):  #username没有设定默认值必须放在形参列表开头    """显示简单问候语"""    print("hello, " + username.title() + ", age is " + str(age))    return username.title()
  • 带有字典返回值的函数定义示例:
    [En]

    example of a function definition with a dictionary return value:*

def build_person(first_name, last_name):  #username没有设定默认值必须放在形参列表开头    """返回字典"""    person = {'first': first_name, 'last': last_name}    return person
  • 传递列表参数,修改列表:
    [En]

    pass the list parameters, and the list will be modified:*

def greet_users(names):    """传入参数为列表"""    for name in names:        msg = "Hello, " + name.title() + "!"        print(mas)usermanes = ['margot', 'hannah', 'ty']greet_users(usernames)
  • 传递列表参数的副本,列表不会修改: def greet_users(names[:]):
  • 传递任意数量的实参: toppings*可以理解成列表;
def make_pizza(*toppings):    """打印顾客点的所有配料"""    print(toppings)make_pizza('pepperoni')make_pizza('mushrooms', 'green peppers', 'etra cheese')
  • Python创建一个名为toppings的空元组;
  • 结合使用位置实参和任意数量实参: def make_pizza(size, *toppings):
  • 必须将接纳任意数量实参的形参 *toppings放在最后;
  • 使用任意数量的关键字实参: **user_info可以理解成字典;
def build_profile(name, **user_info):    """创建一个字典,其中包含我们知道的有关用户的一切"""    profile = {}    profile['name'] = name    for key, value in user_info.items():        profile[key] = value    return profileuser_profile = build_profile('albert', location='princeton', field='physics')print(user_profile)
  • 在Python中,import的是模块,使用 模块.方法(参数)即可调用模块里的函数;
  • 导入特定函数,并以此函数为例:
    [En]

    Import a specific function and use this function as an example:*

from module_name import function_0, function_1function_0()function_1(参数)
  • 使用 as给函数指定别名: from model import function as fn;后续使用 fn()即可调用function函数;
  • 使用 as给模块指定别名: import model as md;后续使用 md.function()即可调用函数;
  • 导入模块所有函数: from model import *;后续直接使用model里的函数 function()即可调用函数;
  • 可以在函数类使用 global关键字声明变量是全局变量;
  • lambda表达式<函数名> = lambda <参数> : <表达式><!--表达式--><!--参数--><!--函数名-->
  • 示例:
>>> f = lambda x, y : x + y>>> f(10, 15)25>>> f = lambda : "lambda表达式">>> print(f())lambda表达式
  • 函数与模块编写细节:
  • 外部函数导入的推荐做法:只导入所需要使用的函数 / 导入整个模块并使用句点表示法;
  • 函数和模块的命名应使用小写字母和下划线,而不是驼峰命名法;
  • 函数注释紧跟在函数定义后面,使用文档字符串格式;
  • 给形参指定默认值时, 等号=两边不要有空格;

  • 类中的函数叫方法;

  • 一个类示例:模块名为 dog.py
"""表示小狗和电子狗的类"""

class Dog():
    """模拟小狗"""

    def __init__(self, name):
        """初始化实例"""
        self.name = name
        self.age = 1  #给属性指定默认值

    def get_age(self):
         """返回年龄"""
         return self.age

    def set_age(self, age):
        """设置年龄"""
        self.age = age

    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title() + " is now sitting.")

class TinyDog(Dog):
    """小狗是狗的子类"""

    def __init__(self, name)
        """初始化父类的属性"""
        super().__init__(name)
  • __init__()方法:形参self必不可少,而且必须位与其他参数前面;
  • 创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,其是一个指向实例本身的应用,让实例能够访问类中的属性和方法;
  • self.为前缀的变量都可供类中的所有方法使用,像这样可以通过实例访问的变量称为属性;
  • 有关父子类:
  • 子类和父类必须包含在当前文件中,父类必须在子类前面;
  • 子类定义中括号内必须指定父类名称;
  • super()是一个特殊函数,将父类和子类关联起来;
  • 在Python 2.7中, super()方法需要传递两个实参: 子类名self,并且父类定义的括号内指定字段 object
  • 在Python 2.7中创建类时,需要在括号类内包含单词 objectclass ClassName(object):
  • 类实例(对象)的示例:
class Dog():
    --snip--

my_dog = Dog('willie')
dog_name = my_dog.name  #获取属性
dog_name = my_dog.get_age()  #通过方法获取属性
my_dog.name = 'jucy'  #直接修改属性
my_dog.set_age = 18  #通过方法修改属性
my_dog.sit()  #调用方法
  • dog.py模块里导入多个类: from dog import Dog, TinyDog
  • 导入整个 dog.py模块,然后用句点表示访问需要的类: import dog
  • collections模块里包含一个类 OrderedDict。该类的实例行为几乎与字典相同,区别在于其记录了 键值对的顺序;
  • 类的编码风格:
  • 类采用驼峰命名法,类中的每个单词首字母大写;
  • 实例名和模块名采用小写,并在单词之间加上下划线;
  • 一个空行分隔方法;两个空格分隔类;
  • 需要同时导入标准库和模块和

  • 打开和阅读文件,并在屏幕上显示其内容:

    [En]

    Open and read a file and display its contents on the screen:*

with open('xxx.txt') as file_object:
    contents = file_object.read()
    print(contents)
  • 打开文件 open()和关闭文件 close()可以同时使用,但当有bug时 close()执行不了会导致文件无法关闭。不写 close()将由Python确定是否关闭文件;
  • with关键字在不再需要访问文件后将其关闭;
  • 直接打印contents会多出一个空行,可以这样打印 print(contens.rstrip())
  • 有关文件绝对路径:
  • Linux和OS X: file_path = '/home/.../xxx.txt'
  • Windows: file_path = C:\...\xxx.txt
  • 建议将数据文件存储在程序文件所在的目录,或程序文件所在目录的下一级文件夹;
  • 逐行读取:
with open(filename) as file_object:
    for line in file_object:
    print(line)
  • 同理,直接打印contents会多出一个空行,可以这样打印 print(line.rstrip())
  • 使用 with关键字时, open()返回的对象只在with代码块内可用;
  • 在处理文件相关时注意使用 strip()rstrip()去除字符串两边的空格;
  • Python将所有文本都解读成字符串;
  • open('xxx.txt', 'w'):以写入方式打开文件;
  • 其他参数还有 r读取、 a附加、 r+读写;
  • a附加:将内容附加到文件末尾,而不是覆盖文件原来的内容;
  • w写入模式打开文件需要小心,如果指定文件名已存在,Python将在返回对象前清空文件;
  • Python只能将字符串写入文本文件;

  • 使用 try-except 处理异常:

try:
    print(5/0)
except ZeroDivisionError:
    print('捕获到ZeroDivisionError异常')
else:
    print('未捕获异常')
finally:
    print('无论是否有异常都会执行')
  • 可在 except的缩进块里添加关键字 pass跳过错误捕获;
  • 其中, elsefinally部分的代码块可省;

  • 使用Python标准库中的模块 unittest进行测试;

  • 一个简单的测试示例:
import unittest
from model_name import function_name

class TestCase(unittest.TestCase):
    """测试函数function_name"""

    def setUp(self):
        """构建前置条件"""

    def test_function(self):
        run_result = function_name(parameter)
        self.assertEqual(run_result, correct_result)

unittest.main()
  • 首先导入模块 unittest和被测试方法 function_name
  • 然后创建 TestCase类,其包含各种具体的单元测试方法。该类继承 unittest.TestCase类;
  • setUp()方法的作用是创建前置条件;
  • 编写测试方法 test_function,方法名必须以 test_打头;
  • 使用断言 assertEqual()判断函数执行结果与预期结果的差别;
  • unittest.main()让Python运行这个文件中的测试;
  • unittest里常用的6个断言方法请见《Python常用函数、方法示例总结(API)》
  • 每完成一个测试,Python都会打印一个字符:
  • 测试通过打印句点 .
  • 测试引发错误打印一个 E
  • 测试导致断言失败打印一个 F

新出品,如果有什么错误,欢迎指点,非常感谢!欢迎关注公众号,将分享更多的日常事物!如需转载,请注明出处!

[En]

New production, if there are any mistakes, welcome to point out, thank you very much! Welcome to follow the official account, will share some more daily things! If you need to reprint, please mark the source!

Original: https://www.cnblogs.com/dlhjw/p/15559012.html
Author: 多氯环己烷
Title: Python | Python语法基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/510758/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python模块

    python模块是一个py文件,一个模块只会被导入一次 python在编译或安装的时候会确定搜索路径,使用import语句的时候,python解释器就从搜索路径(即一系列目录名)中…

    Python 2023年11月3日
    041
  • python命名空间和作用域

    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的 命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间 相同的对象名称可以存在于多个命名空间…

    Python 2023年11月3日
    033
  • python如何屏幕输入_Pygam中的屏幕输入

    在学校的一个编程项目中,我必须用pygame创建一个拼写游戏。然而,由于我对这一切都很陌生,所以我无法想出如何允许用户输入字母并使它们出现在游戏显示屏上。这是我目前为止的代码(以及…

    Python 2023年9月23日
    040
  • 贪吃蛇游戏用python总结_结对-贪吃蛇游戏-结对项目总结

    经过一个多月的时间,结对编程项目已经接近了尾声,通过软件工程这门课,让我和我的搭档学会了如何合作,如何一起处理bug,如何结对编程。 我们所做的项目是利用python自带的pyga…

    Python 2023年9月20日
    038
  • Bugly iOS自动导入符号表

    前言 最近在处理Bugly问题的时候顺便解决了下符号表上传的问题,使用最新的上传工具包,也是顺便整理了下可以使用的脚本添加到了项目中,把这个过程中遇到的问题总结出来,脚本也会给出来…

    Python 2023年10月21日
    035
  • python绘图代码大全_python绘图代码总结

    经常重复使用的绘图代码 使用SciencePlots画论文配图可见:传送门 折线图 import matplotlib.pyplot as plt import matplotli…

    Python 2023年9月6日
    049
  • 数据预处理(考试版1)

    数据预处理的主要任务数据清理填充缺失值,识别/去除离群点,光滑噪音,并纠正数据中的不一致数据集成多个数据库,数据立方体或文件的集成数据归约得到数据的归约表示,它小得多,但产生相同或…

    Python 2023年8月8日
    160
  • python的日期处理

    俗话说,工欲善其事必先利其器,所以在使用日期前要先对日期进行处理,所以时间戳和字符串的来回来去转换这个事肯定是要搞的 这次的函数有一个?有两个?有三个?有四个!上代码! 哈哈,像不…

    Python 2023年10月31日
    041
  • python+matplotlib绘制具有多个子图的图表

    目录 1.示例 2.向示例中添加元素 2.1添加标题 2.1.1 调整标题位置 2.2添加图例 2.3 添加文本 2.3.1 单行文本 ​编辑 2.3.2 多行文本 2.4添加坐标…

    Python 2023年8月31日
    073
  • python大数据之缺省值处理

    一般对数据进行缺省值处理,都是全部的数据,所以这里先不做分割。 废话不多说,直接上干货 一些常用的命令 df_train = pd.read_csv("data2/tra…

    Python 2023年8月7日
    073
  • python把dataframe转置_python中series转dataframe的两种方法

    在python的pandas包中,其中一个数据类型DataFrame想要转换为Serie会自动转换,那将Series转为DataFrame又如何实现呢?本文介绍python中ser…

    Python 2023年8月7日
    068
  • python的pandas的stack和unstack函数的使用及区别

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/11…

    Python 2023年8月19日
    061
  • javaweb_Http学习

    文本:html,字符串,~… 超文本:图片,音乐,视频,定位,地图….. 默认端口:80 Https:安全的 默认端口:443 http1.0 HTTP/1…

    Python 2023年6月12日
    070
  • OpenCV之C++经典案例

    四个案例实战 1、刀片缺陷检测 2、自定义对象检测 3、实时二维码检测 4、图像分割与色彩提取 1、刀片缺陷检测 问题分析 解决思路 尝试二值图像分析 模板匹配技术 代码实现 #i…

    Python 2023年10月14日
    044
  • python3.5没有pip模块_python – 使用pip安装的模块,未找到

    我试图通过pip安装一个名为”simpleguitk”的软件包. (在使用Python 3.5的Ubuntu 16.04上) 跑完之后 sudo -H pi…

    Python 2023年9月23日
    027
  • C++程序运行Python脚本调试记录

    目录 背景: 遇到的问题: 1. 找不到python39_d.dll 2. 多个python环境下使用指定的pip 3. 导入numpy报错:Original error was:…

    Python 2023年8月27日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球