前言

本文不是一篇系统的从零开始学习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. 秦殇 xbm buffer

    秦殇的图片是封装在lib文件中的, 而且格式为xbm, xbm具体的结构

  2. HDU 5828 Rikka with Sequence(线段树区间加开根求和)

    Problem DescriptionAs we know, Rikka is poor at math. Yuta is worrying about this situation, so he g ...

  3. MYSQL、SQL在LIKE里传的参数没有赋进去的原因

    SQL语句 = string.Format(" where name like '%@key%' "); para.Add(new MySqlParameter("@ke ...

  4. PHP pthread 多线程 案例

    <?php /** *检测http服务是否可以正常访问 *启动三个线程执行任务 */ class taskWork extends Thread { public $url = ''; //检测 ...

  5. CentOS7中firewall防火墙详解和配置,.xml服务配置详解

    修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙 1. firewall-cmd --state ...

  6. 数字提取——C语言

    Problem Description AekdyCoin is the most powerful boy in the group ACM_DIY, whose signature is valu ...

  7. java中date日期格式的各种转换

    示例 Date dt =new Date(); System.out.println(dt); //格式: Wed Jul 06 09:28:19 CST 2016 //格式:2016-7-6 Str ...

  8. hadoop 有那些发行版本

    hadoop发行版本 1. apache hadoop  http://hadoop.apache.org/ 2. cloudera hadoop(CDH) https://www.cloudera. ...

  9. javascript字符串方法总结

    一.单引号字符串内部可以使用双引号,双引号字符串内部也可以使用单引号 "hello 'world'" 'welcome "to" js' 二.多行和转义 如果要 ...

  10. MFC禁用关闭按钮

    有时候我们在写MFC程序时,需要在对话框中开启线程处理一些事情,如果在线程执行过程中点击关闭按钮,会导致程序崩溃. 这里介绍一种解决方法,禁用关闭按钮 解决方法 开启线程前禁用关闭按钮 CMenu* ...