学习一门语言,首先就要学习它的数据类型和语法。这里与JS进行对比学习。

1.数据类型

  python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合(set),除此之外,还有布尔(bool)、空(None)

  应用:判断变量的类型:

  (1)isinstance(变量名,类型)

  eg:isinstance(1,int)

  (2)通过与其他已知类型的常量进行对比(type)

  eg:a=100;type(a)==type(1)

  

  详见:https://github.com/MRlijiawei/algorithms/blob/master/others/python%E6%96%B9%E6%B3%95%E5%B0%81%E8%A3%85.py

  isinstance() 与 type() 区别:

    type() 不会认为子类是一种父类类型,不考虑继承关系。

    isinstance() 会认为子类是一种父类类型,考虑继承关系。

  如果要判断两个类型是否相同推荐使用 isinstance()。

  需要注意的还有,python的true和false是首字母大写的True和False。

2.字符串编码

  python的字符编码有GB2312(中文)、ASCII(机器)、Unicode(多语言支持)、UTF-8。

  在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。如下图:

  

3.python字符串及其格式化

  python3字符串是以Unicode编码的。Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。Python对bytes类型的数据用带b前缀的单引号或双引号表示。

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
>>> '\u4e2d\u6587'
'中文'
x = b'ABC'

  以Unicode表示的str通过encode()方法可以编码为指定的bytes,反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文' >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'

  此外,计算字符长度,python中使用len(),相当于js的.length。

  保存为utf-8编码,文件开头注释如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

  格式化:有两种,%占位符和format。

  (1)%:%d--整数,%s--字符串,%f--浮点数,%x--十六进制数。(%%--就是%)

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

  其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

print('%4d-%03d' % (3, 1))
print('%.2f' % 3.1415926)

3-001 
3.14

  (2)format

>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'

  注意%的优先级不比*低。

4.list和tuple

  list和js的Array非常类似。不同的是,list可以使用下标-n来取倒数第n个元素。在内置方法上也有所不同。Array插入是push,list从末尾插入是append,从中间插入是insert(index, el)。末尾删除都是pop,但list的pop方法可以接收一个参数以删除指定位置元素。其余方法如sort(),基本相同。

  而tuple元组,是不可以被改变的list。因而会使其值发生改变的方法将不适用。这里的不变,指的是元素的指向不变。如果元素指向的值发生了变化,则tuple会发生变化。比如,tuple里包含了一个list,则这个list是可变的。list用[],tuple用()。

  需要注意的是,tuple如果只有一个元素,需要加一个逗号。a = (1) #1;  a = (1,)#(1,)

5.if条件语句

  python的if语义上与JS的相同,只是表示方法上有所不同。比如,js是要将条件语句括起来,然后执行体用花括号括起来;而python则是使用冒号和缩进来表示关系。js里的else if,在python中是elif,如下:

age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')

  输入输出:python中是input()和print。input如果带参数,则参数是输入提示;print同console.log。如:birth = input('birth: ')

6.循环语句

  python的循环有两种:for...in...:和while...:。同样,python的循环有break和continue两个标识符。

7.dict和set

  dict(字典)类似map对象。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

  因而同样,dict可以使用in,如:

//js
1 in [1,2]
'a' in {'a':1}
#python
'a' in {'a':1}

  此外,不同的是,python字典可以get(key)可以达到类似的效果。如果key不存在,可以返回None,或者自己指定的value,如d.get('Thomas')  d.get('Thomas', -1)#不存在返回指定的-1。返回None的时候Python的交互环境不显示结果。

  还可以pop(key)删除。

  set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合,如:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

  set会自动过滤重复元素。add(key)添加,remove(key)删除。set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

8.函数方法

  一些基本的函数,比如js的Math下的相关函数,在python可以不必Math.就可以直接使用,如abs(),max()。此外还有hex(转为16进制),int(),str(),float(),bool()等。

  自定义函数,python的关键字是def。同样可以使用return且可以返回多个值。不同的是可以使用pass语句,来达到什么也不做处理的占位符效果。

# -*- coding: utf-8 -*-
# 计算一元二次方程的解
import math def quadratic(a, b, c):
if a == 0:
return "a不能等于0"
d = b*b - 4*a*c
if d < 0:
return "此方程无解"
result1 = (-b + math.sqrt(d))/(2*a)
result2 = (-b - math.sqrt(d))/(2*a)
return result1, result
#自定义抛出异常
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
#默认参数
import math def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny #可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
#关键字参数
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
#递归  汉诺塔
# -*- coding: utf-8 -*-
def move(n, a, b, c):

    if n == 1:
      print(a, '-->', c)
    else:
      move(n-1, a, c, b)
      move(1, a, b, c)
      move(n-1, b, a, c)

  此外还有命名关键字参数、参数组合等。https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

Python总结(二)的更多相关文章

  1. Python 基础 二

    Python 基础 二 今天对昨天学习的Python基础知识进行总结,学而不思则惘,思而不学则殆! 一.先对昨天学习的三大循环的使用情况进行总结: 1.while循环的本质就是让计算机在满足某一条件的 ...

  2. 初学Python(二)——数组

    初学Python(二)——数组 初学Python,主要整理一些学习到的知识点,这次是数组. # -*- coding:utf-8 -*- list = [2.0,3.0,4.0] #计算list长度 ...

  3. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  4. 有关python下二维码识别用法及识别率对比分析

    最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...

  5. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  6. 从Scratch到Python——Python生成二维码

    # Python利用pyqrcode模块生成二维码 import pyqrcode import sys number = pyqrcode.create('从Scratch到Python--Pyth ...

  7. 用python生成二维码

    Python生成二维码,可以使用qrcode模块, github地址 我是搬运工 首先安装, 因为打算生成好再展示出来,所以用到Pillow模块 pip install qrcode pip inst ...

  8. Python 实现二维码生成和识别

    今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...

  9. Python - 模块(二)

    目录 Python - 模块(二) re re下面的方法 logging os Python - 模块(二) re re模块提供了正则表达式的相关操作 主要字符介绍: . 通配符,除了换行符之外的任意 ...

  10. 使用 Python 生成二维码

    在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁.扫码支付.共享单车和网购.其中扫码支付指手机通过扫描二维码跳转到支付页面,再进行付款.这种新的支付方式,造就二 ...

随机推荐

  1. 致 CODING 用户的元宵问候

    元宵快乐! 感谢您一直以来对 CODING 的理解与支持.2019 年 CODING 也走入了创业的第五个年头,为了将"让开发更简单"的愿景落地,我们做了许多探索,产品完成度也在不 ...

  2. 快速构建H5单页面切换应用

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  3. 基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

  4. Vue(day6)

    一.webpack中常用的文件loader & 插件 由于版本存在变动,以下安装和配置都有可能发生变化,请以官方文档为准. 1.html-webpack-plugin插件 html-webpa ...

  5. 音频处理EQ的基本概念

     我们通常所说的人声,歌声以及乐声都是一个复合音,也就是由声音的基音和一系列的泛音所构成的.这些泛音都是基音频率的倍数,物理学中叫分音,电声学中叫谐波,音乐中则把它们称做泛音.可以说,泛音对音色的特性 ...

  6. GitHub的Repository权限将public转为private

    2019年1月7日,GitHub CEO Nat Friedman 于官方博客公开发文,称“New year, new GitHub”,宣布从此将免费无限地为普通用户提供私有仓库服务. 因此,我们可以 ...

  7. Linux下Springboot解决`APR based Apache Tomcat Native library`提示

    最近转行做java,开发基于Springboot的项目,版本号为2.1.0.RELEASE. 启动应用,发现以下提示: The APR based Apache Tomcat Native libra ...

  8. mongo connections url string 的问题

    摘要 driver 连接Mongo DB的url其实很简单,就是几个变量拼接成一个url,和关系型数据库没什么不同.但是因为mongo有单个instance和replicaSet不同的部署策略,还有m ...

  9. dotnet core开源博客系统XBlog介绍

    XBlog是dotnet core平台下的个人博客开源系统,它只需要通过Copy的方式即可以部署到Linux和windows系统中:如果你有安全证书那只需要简单配置一下即可提供安全的Https服务.接 ...

  10. MySQL性能基准测试对比:5.7 VS 8.0

    本文由云+社区发表 作者:数据库 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意 ...