2.3 Python语言基础
2.3 Python语言基础
1 语言语义(Language Semantics)
缩进,而不是括号
Python使用空格(tabs or spaces)来组织代码结构,而不是像R,C++,Java那样用括号。
建议使用四个空格来作为默认的缩进,设置tab键为四个空格
另外可以用分号隔开多个语句:
a = 5; b = 6; c = 7
所有事物都是对象(object)
在python中,number,string,data structure,function,class,module都有自己的“box”,即可以理解为Python object(对象)。下面所有的对象直接用object来指代。
调用函数和对象的方法
用圆括号
result = f(x,y,z)
动态参考,强类型
不像C++,Java之类的语言,python中object reference是没有自带类型的。但是可以通过type来查看类型:
a = 5
type(a)
int
类型信息存储在这个对象本身。
而python可以看做是强类型,即每一个object都有一个明确的类型。所以下面的运算不会成立。但是Visual Basic会把'5'变为整数(int),而JavaScript会把5变为字符串(string)
'5' + 5
TypeError Traceback (most recent call last)
in ()
----> 1 '5' + 5
TypeError: Can't convert 'int' object to str implicitly
不过像是int与float之间倒是会隐式转换:
a = 4.5
b = 2
print('a is {0}, b is {1}'.format(type(a), type(b)))
a is <class 'float'>, b is <class 'int'>
a / b
2.25
因为知道每个Object的类型很重要,我们可以用isinstance
函数来查看object的类型
a = 5
isinstance(a, int)
True
查看a、b是否是int或float类型
a=5;b=4.5
isinstance(a, (int, float))
True
isinstance(a, (int, float))
True
属性和方法
属性(Attributes)指在当前这个object里,还有一些其他的python object。方法(method)指当前这个object自带的一些函数,这些函数可以访问object里的内部数据。
通过obj.attribute_name
可以查看:
a='foo'
a.<Press Tab>
可以通过getattr函数来访问属性和方法:
getattr(a, 'split')
Duck typing
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试(见下面的“历史”章节),“鸭子测试”可以这样表述:
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
比如,如果一个object能够实现迭代原则,那么这个object就是可迭代的。我们可以看这个object是否有__iter__
这个magic method。或者自己写一个iter function来检测:
def isiterable(obj):
try:
iter(obj)
return True
except TypeError: # not iterable
return False
isiterable('a string')
True
isiterable([1, 2, 3])
True
isiterable(5)
False
这个功能多用于写一些能接受多种类型的函数。比如我们写一个函数,用接收任何序列(list, tuple, ndarray) 甚至一个迭代器。如果接收的不是一个list,那么我们就人为将其转变为一个list:
if not isinstance(x, list) and isiterable(x): # 如果x不是list,且x可迭代
x = list(x) # 转变x为list
Import(导入)
比如我创建了一个some_module.py的文件,里面写着:
# some_module.py PI = 3.14159
def f(x):
return x + 2
def g(a, b):
return a + b
那么在别的文件里,有多重导入方式:
# 1
import some_module
result = some_module.f(5)
pi = some_module.PI
# 2
from some_module import f, g, PI
result = g(5, PI)
# 3
import some_module as sm
from some_module import PI as pi, g as gf
r1 = sm.f(pi)
r2 = gf(6, pi)
运算符(Binary operators)
用is,和is not, 检查两个引用(references)是否指同一个object,
a = [1, 2, 3]
b = a
c = list(a)
a is b
True
a is not c
True
因为c = list(a)
中的list函数创建了一个新的list,所以c是一个新的list,不指向原来的a。
另一个is的常用法是用来检查一个instance是不是none:
a = None
a is None
True
另外像是,+, - ,==, <=, &, |等都也算是运算符,这个就不详细说了,可以直接看这个链接
可更改和不可更改对象(Mutable and immutable objects)
在python的object中,lists, dicts, NumPy arrays, 以及用户自定义的类型(classes), 都是可以更改的。
而string和tuple是不可以更改的:
2 标量类型(scalar types)
这种类型指的是None,str, bytes, float, bool, int
数值型
ival = 123554
ival ** 6
3557466836753811461234217695296
fval = 7.234
fval2 = 5.43e-5
5/2
2.5
#取商
5//2
2
#取余数
5 % 2
1
字符串
a = 'one way of writing a string'
b = "another way"
c = """
This is a longer string that
spans multiple lines
"""
c.count('\n') # 有三个回车符
3
字符串类型是不可变的:
a[10] = 'f'
TypeError Traceback (most recent call last)
in ()
----> 1 a[10] = 'f'
TypeError: 'str' object does not support item assignment
把其他类型转换为字符串:
a = 5.6
s = str(a)
s
'5.6'
因为字符串是一连串Unicode字符,所以可以当序列来处理,像list和tuple一样:
s = 'python'
list(s)
['p', 'y', 't', 'h', 'o', 'n']
s[:3]
'pyt'
反斜线用来制定特别的字符,比如回车符\n
s = '12\\34'
print(s)
12\34
可以用前缀r来直接写出想要的字符串格式,而不用输入很多反斜杠:
s = r'this\has\no\special\characters'
# 实际的s
s
'this\has\no\special\characters'
# 加法用于连接两个字符串
s + s
'this\has\no\special\charactersthis\has\no\special\characters'
字符串的模板,或叫做格式化,是一个很重要的课题。string ojecjt有一个format的方法:
template = '{0:.2f} {1:s} are worth US${2:d}'
template
'{0:.2f} {1:s} are worth US${2:d}'
在这个string中:
{0:.2f}
: 第一个参数为float类型,去小数点后两位{1:s}
: 把第二个参数变为string类型{2:d}
: 把第三个参数变为一个精确的整数
template.format(4.5560, 'Argentine Pesos', 1)
'4.56 Argentine Pesos are worth US$1'
2.3 Python语言基础的更多相关文章
- 零基础学Python--------第2章 Python语言基础
第2章 Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...
- ArcPy开发教程1-面向ArcGIS的Python语言基础
ArcPy开发教程1-面向ArcGIS的Python语言基础 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 第一节课 时间2019年2月26日 上午第一节 讲解:A ...
- Python语言基础与应用 (P16)上机练习:基本数据类型
本文是笔者在学习MOOC课程<Python语言基础与应用> (北京大学-陈斌)中根据上机课时的要求写下在代码 课程总链接: 中国大学MOOC B站 本节课链接 数值基本运算: 33和7+, ...
- Python 语言基础
Python 语言基础 Python 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- [Python学习笔记1]Python语言基础 数学运算符 字符串 列表
这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...
- python(一):python语言基础
一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...
- 【Python笔记】Python语言基础
Python是一种解释性(没有编译).交互式.面向对象的语言 1.安装python编译器 版本:Python2.7比较普遍,Python不是向下兼容的软件,因此Python3.x有些东西不好找资料 2 ...
- Python实验报告——第2章 Python语言基础
实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...
随机推荐
- 转载:SQL中的case when then else end用法
SQL中的case when then else end用法 来源: http://www.cnblogs.com/prefect/p/5746624.html Case具有两种格式.简单Case函数 ...
- Kafka、RabbitMQ、RocketMQ消息中间件的对比
引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,目前对Kafka.RabbitMQ.RocketMQ这三个消息中间件做下对比分析. - - k ...
- Java数据类型和不同数据类型在JVM内存分配
1.java数据类型分类 Java语言是强类型(Strongly typed)语言,强类型包含两方面的含义:①所有的变量必须先声明,后使用:②指定类型的变量只能接受类型与之匹配的值.这意味着每个变量和 ...
- 《Programming iOS 7》读书笔记 - 窗体大小与状态栏
1.从iOS7开始,状态栏开始变为透明的,根识图占领了整个窗体,包括状态栏后面的20像素高的区域,这种样式无法被改变.iOS6的状态栏是不透明的,窗体的尺寸通常会比屏幕的尺寸要小,可以设置窗体的尺寸为 ...
- ReadWriteLock
ReadWriteLock也是一个接口,只有两个方法 一个用来获取读锁,一个用来获取写锁.也就是说将文件的读写操作分开,分成2个锁来分配给线程,从而使得多个线程可以同时进行读操作.下面的Reentra ...
- xamarin.Android 选择本地图片、拍摄图片、剪裁图片
[Activity(Theme = "@style/MyStyleBottom")] public class SelectPicPopupWindow : Activity, I ...
- CSS流体(自适应)布局下宽度分离原则——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1463 一.简短的前言 ...
- Springmvc中的HandlerAdaptor执行流程
今天讲解一下在Springmvc中的HandlerAdaptor执行流程,明白这个过程,你就能画出下面的图: 接下来我们就来看看具体的实现过程吧. 1.0在DispatcherServlet中找到ge ...
- drupal7图片样式无法生成与显示
正常设置了图像的样式,并且为内同类型正确设置了显示的样式.但是上传图片后,却并没有在对应的文件夹下生成对应的缩略图.自然没有显示. 网上查询了一下,需要为nginx添加两个设置: location @ ...
- js原生实现轮播
前两天同事面试新人,让现场写”轮播的实现”.我一想这玩意貌似我也没写过啊,就在旁边暗搓搓地拖了一张纸也在那写,同事都纳闷了! 这玩意实现方法有很多种,就看喜欢那种,喜欢怎么写而已.我这里是通过对img ...