前言

本文不是一篇系统的从零开始学习Python的教程,如果你需要从零开始学习Python,廖雪峰的官方网站Python教程这部分将是比较好的一种选择,如果你英语比较好,也可以在国外的一些网站上找到优质的教学视频(比如某油管视频网站)。

阅读本文的前提可能需要你有一定的编程基础,并最好了解一种以上其他主流的面向对象的编程语言,比如Java、C#、PHP等。

首先需要了解的是,Python与PHP类似,是一种解释型的编程语言,与之对应的是Java、C#这类编译型的语言。我自己有比较丰富的C#和PHP方面的经验,两种类型的语言(指解释型和编译型)各有各的优缺点。随着各种语言的发展,现在各种语言之间也会互相借鉴一些好的特性,因此语言之间的差异也开始越来越模糊。所以我认为语言并没有好坏之分,而是某种语言会更适合在某些场景下使用,如果你会多种语言,可以根据需求选用不同的语言开发,从而达到事半功倍的效果。

基本语法

这里只说三点,与其他语言相同或者相似之处就不做解释了。

注释

  • 单行注释符号: #

# This is one line comment

  • 多行注释: 以'''(三个单引号)起始,并以'''结束的

'''
These lines are comments.
You can write multiple lines here.
xxxxxxx
'''

行末 : 符号

if, elif, else, for, def, class等关键字行的行末应加上, 否则会报语法错误。

缩进

Python用的是4个空格作为缩进,作用域也不用花括号括起来,而是通过缩进来判断:


class TestClass():
def test_func(): # 4个空格缩进,表示在TestClass范围内
if True: # 8个空格缩进,表示在TestClass的test_func范围内
pass # 12个空格缩进,表示在TestClass的test_func的if判断内 print('xxx') # 8个空格缩进,表示在TestClass的test_func范围内 print('test') # 4个空格缩进,表示在TestClass范围内 print('abc') # 没有缩进,表示执行的时候总会执行到这一行

有别于其他语言的一些特性

数字操作符

数字操作符中,有两个值得一说的操作符。

  • 除法/将得到小数结果,地板除//将自动向下取整:

18 / 4 = 4.5

18 // 4 = 4

  • 计算指数**

5 ** 3 = 125

字符串

字符串前缀

r:raw string

s = 'daniel\nfu' # 将输出两行,第一行为daniel,第二行是fu

s = r'daniel\nfu' # 将只输出一行: daniel\nfu, 其中\n将直接输出而不作为换行符来对待

b:binary

print(b'\xe2\x82\xac20'.decode('utf-8')) # 将输出€20

f:format


name = 'Daniel'
age = 33
print(f'My name is {name.upper()} and I am {age} years old.') # 输出结果:
My name is DANIEL and I am 33 years old.

切片


name = "Hello there, my name is Daniel Fu and I`m 33 years old." print(name[4]) # 字母o(hello的最后一个字母),从左至右第5个字母(因为index是从0开始) print(name[-3]) # 字母l(old中的l),index为负数表示从右至左第三个字母(-0和0没有区别,因此负index是从-1开始的) print(name[6:11]) # 结果为"there", 即从index6开始,到index11结束(但不包含11)的所有内容 print(name[:5]) # 结果为"Hello",省略起始值,则表示从0开始 print(name[45:]) # 结果为"years old.", 省略终止值表示从index45开始,直至字符串结束的所有内容 print(name[:]) # 省略起止值,即返回整个字符串 print(name[::5]) # 结果为"Hlotee ynm sDne uadIm3 er l.",第三个参数表示结果中每隔N(此例为5)个字母返回一个 print(name[::-2]) # 结果为".l re 3mIdau enDs mny eetolH",表示将字符串反转之后,每隔N(此例为2)个字母返回一个

切片是个非常有意思的特性,有了这个特性,实现某些功能将会异常简单,举两个例子:

  • 判断字符串是否是回文
def is_palindrome(x):
if not isinstance(x, str):
x = str(x)
return x == x[::-1] print(is_palindrome('abcdedcba')) # True
print(is_palindrome(123454321)) # True
print(is_palindrome('abcdefg')) # False
  • 字符串首字母大写,其他小写

def capitalize_word(x):
if not isinstance(x, str):
return 'Argument should be a word'
else:
return x[:1].upper() + x[1:].lower() print(capitalize_word('daniel')) # Daniel print(capitalize_word('CHINA')) # China
print(capitalize_word('wOrLd')) # World
print(capitalize_word(13)) # Argument should be a word
print(capitalize_word(True)) # Argument should be a word

利用切片这种操作,有些在其他语言里看起来需要多行代码才能搞定的功能,在Python里的核心代码可能只需要一行。另外,数组(array)和元组(tuple)也可以使用切片功能,用法上和字符串切片是一样的:


chars = ['a', 'b', 'c', 'd', 'e', 'f'] # 改成元组: ('a', 'b', 'c', 'd', 'e', 'f') 也是一样的效果,返回的结果是元组而不是数组 print(chars[1]) # b
print(chars[-1]) # f
print(chars[1,3]) # ['b', 'c']
print(chars[:2]) # ['a', 'b']
print(chars[4:]) # ['e', 'f']
print(chars[::-1]) # ['f', 'e', 'd', 'c', 'b', 'a']
print(chars[::2]) # ['a', 'c', 'e']
print(chars[::-2]) # ['f', 'd', 'b']

函数参数

可变参数列表


def test_func(*args):
for ar in args:
print(ar) print(test_func(['d', 'e', 'f'])) # 结果为:['d', 'e', 'f']
print(test_func(*['d', 'e', 'f'])) # 结果为: 'd', 'e', 'f' 三行,表示传入了3个参数。

另外一个比较有意思的例子:


def drop_first_last(grades):
first, *middle, last = grades # 这句将传入的参数的第一个值赋给first变量,最后一个值赋给last变量,其他任意多的值,赋给*middle这个可变长变量
avg = sum(middle) / len(middle)
return avg print(drop_first_last([1, 2, 3, 4])) # 2.5 去掉1和4之后,求2和3的平均值

列表展开

定义多个变量,自动对应到列表中的值:


a1, b1, c1 = [1, 2, 3]
print(a1) # 1
print(b1) # 2
print(c1) # 3 a2, b2, c2 = (11, 12, 13)
print(a2) # 11
print(b2) # 12
print(c2) # 13 a3, b3, c3 = 'abc'
print(a3) # a
print(b3) # b
print(c3) # c # 参数数量对不上,则会报错
a4, b4 = ['a', 'b', 'c'] # ValueError: too many values to unpack (expected 2)

多父类继承

很多语言都只能从单一父类继承,而Python可以多个父类继承。


class Animal(object):
def __init__(self, name):
self.name = name def run(self):
print(self.name, 'is running!') class AmuseThing(object):
def amuse(self):
print(self.name, 'is amusing you!') class Dog(Animal):
def bark(self):
print(self.name, 'is barking!') class Husky(Dog, AmuseThing):
pass husky = Husky('Idiot husky')
husky.run() # 从Dog中继承,而Dog从Animal中继承
husky.bark() # 从Dog中继承
husky.amuse() # 从AmuseThing中继承

掌握了这些知识点之后,我们对Python有了一定的了解,这样在后续进阶一点的学习过程中,我们可以充分利用某些特性来实现我们的需求。


本文在博客园和我的个人博客www.fujiabin.com上同步发布。转载请注明来源。

Python3学习笔记 - day1的更多相关文章

  1. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  2. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  3. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  4. python3学习笔记(6)_iteration

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...

  5. python3学习笔记(5)_slice

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...

  6. OpenCV图像处理学习笔记-Day1

    OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...

  7. Python3学习笔记01-环境安装和运行环境

    最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...

  8. python3学习笔记(9)_closure

    #python 学习笔记 2017/07/13 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #从高阶函数的定义,我们可以知道,把函数作为参数的函数, ...

  9. python3学习笔记(8)_sorted

    # python学习笔记 2017/07/13 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #python 内置sorted()函数 可以对list进 ...

随机推荐

  1. AS3中的单件(Singleton)模式

    单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例.但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常 ...

  2. yii2 basic版本的一些配置

    1.nginx配置 重写规则 修改访问模式为 http://wh.store/admin/index 文件位置: /home/wwwroot/default/yii2-app-basic/config ...

  3. Android后台监控指定app的输入内容,抢红包,模拟点击原理

    Android开启辅助功能之后可以用AccessibilityService 去后台监控指定的app的输入内容,也可以监控到app的动作 以及通知栏的动作, 抢红包其实就根据通知栏出现了红包的通知消息 ...

  4. adb、monkey常用命令

    adb.monkey常用命令 1.查看连接设备 adb devices 2.连接android模拟器 adb connect 127.0.0.1:62001 3.安装软件 adb install 这个 ...

  5. 【.Net】 大文件可使用的文本分组统计工具(附带源码,原创)

    本工具可实现的效果: 1.读取大文件(大于1GB) 2.根据分隔符分割后的列分组 3.速度快. 4.处理过程中,可以随时停止处理,操作不卡死. 5.有对当前内存的实时监测,避免过多占用内存,影响系统运 ...

  6. 如何快速学好Shell脚本? 转

    如何快速学好Shell脚本?   目录 写作思路 知识体系 Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值.但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言 ...

  7. 201621123002《JAVA程序设计》第一周学习总结

    1.本周学习总结 1.下载并安装JDK,设定path变量 Java SE Downloads 2.了解JD与JRE的区别与联系 3.下载eclipse并完成实现简单程序 Downloads 4.使用命 ...

  8. ES6最新语法

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  9. 第二阶段第一次spring会议

    昨天我们讨论了改进方法,打算建立数据库. 今天我对39个组发表了建议以及总结了改进意见和改进方案. 明天我将对软件添加回收站.

  10. Axure RP Extension for Chrome 插件安装

    描述 我的chmod浏览器上不去谷歌商店,我用的是蓝灯,登上商店后搜索Axure RP Extension for Chrome,下载安装,完成后进入这个插件的详细信息: 使用 打开用axure生成的 ...