参考:菜鸟教程    Python用途

目录

一、数据类型

二、运算符

三、条件和循环控制语句

四、函数

五、模块

六、输入与输出

一、数据类型

  string、list和tuple都属于sequence(序列)。三者都可以进行截取,索引值以0为开始值,-1为从末尾的开始位置。加号+是字符串的连接符。 星号*表示复制当前字符串,紧跟的数字为复制的次数。

1. 数字(Number)

  用于存储数值,每个变量在使用前都必须赋值。数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。

a = 5
a = b = c = 1 # 多个变量赋值
a, b, c = 1, 2, 5.6

2. String(字符串)

  在Python3中,所有字符串都是Unicode字符串。( Python的注释: 单行注释以#开头, 行注释用三个单引号 '' 或三个双引号 "" 将注释括起来 )

a. 字符串截取
print (str) # 输出字符串 Hello
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符, Hell b. 使用反斜杠(\)转义特殊字符,在字符串前面添加一个r则不会转义
print(r"Hello\nWorld") # 不换行,直接输出Hello\nWorld  
print ("我叫 %s 今年 %d 岁!" % ('小明', 10)) 字符串格式化  c. python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符TAB ( \t )。
"""

3. List(列表)

  列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

employee = [1, 'Amy', 23, 'China', 27000.00]
company = ['ABC', 'US']
print(employee[1:3] * 2) # 从第二个开始输出到第三个元素, 输出两次 ['Amy', 23, 'Amy', 23]
print(employee + company) # [1, 'Amy', 23, 'China', 27000.00, 'ABC', 'US']
employee[1:3] = ['Sandy', 18] # list元素可以改变
del employee[2] # 可以使用 del 语句来删除列表的的元素

4. Tuple(元组)

  元组与字符串类似,可以把字符串看作一种特殊的元组。

a. 元组的定义
tuple = (1, 'Amy', 23, 'China', 27000.00)
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号,否则括号会被当作运算符使用,tup2 = (20)表示整数
t = 1, 2, 'a' # t[0]=1 t=(1, 2, 'a')
u = t, (1, 2, 3, 4, 5) # u=((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) b. 截取
print (tuple[0:-1]) # 截取
tup3 = tup1 + tup2;  # 创建一个新的元组,元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
del tup #元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 c. 函数应用
def test1(a,b):    #函数返回多个值的时候,是以元组的方式返回的。
return (a,b)
def test2(*args):   #python中的函数还可以接收可变长参数,参数名以*开头,该参数的类型也是元组
return args

5. Set(集合)
  集合(set)是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。可以使用大括号{}或者set()函数创建集合。
  注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。

a. 成员测试
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
if('Rose' in student) : 
print('Rose 在集合中')
b. 集合计算
s1 = set('abracadabra'); s2 = set('alacazam')
print(s1 - s2) # s1和s2的差集 {'b', 'd', 'r'}  |表示并集 &表示交集 ^表示s1和s2中不同时存在的元素

6. Dictionary(字典)
  字典(dictionary)是Python中另一个非常有用的内置数据类型。列表是有序的对象结合,字典是无序的对象集合。字典当中的元素是通过键来存取的,键(key)必须使用不可变类型。创建空字典使用{}

dict = {'Name': 'Amy', 'Age': 18}
dict['Age'] = 20; # 更新 Age
dict.clear() # 清空字典
del dict # 删除字典

 判断对象类型

type(a)             # <class 'int'>
isinstance(a, int) # True
区别:type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。
class A:
  pass # 如果没有内容,可以写pass,但是如果不写pass就会语法错误
class B(A):
  pass
print(type(B(), A) # False
print(isinstance(B(), A) # True 

 遍历字典

fruit = {'a': 'apple', 'b': 'banana'}
for k, v in fruit.items():
print(k, v)

6. 列表的变形

# 列表基本方法
ls = ['a', 'b', 'c']
ls.count('a') #
ls.insert(1, 'a1') # ['a', 'a1', 'b', 'c']
ls.append('d') # ['a', 'a1', 'b', 'c', 'd']
ls.index('b') #
ls.remove('a1') # ['a', 'b', 'c', 'd']
ls.reverse() # ['d', 'c', 'b', 'a']
ls.sort() # ['a', 'b', 'c', 'd'] #遍历列表
for i, v in enumerate(['a', 'b', 'c']):
print(i, v)
# 使用zip()组合同时遍历两个或更多的序列
for q, a in zip(questions, answers):
print('What is your {0}? It is {1}.'.format(q, a))
#反向遍历一个序列, 正向使用sorted
for i in reversed(range(1, 10, 2)):
print(i) #9 7 5 3 1 # 将列表当做堆栈使用(后进先出)
stack = ['a', 'b', 'c']
stack.append('d') # ['a', 'b', 'c', 'd']
stack.pop() # ['a', 'b', 'c'] # 将列表当作队列使用(先进先出)
from collections import deque
queue = deque(['a', 'b', 'c'])
queue.append('d') # deque(['a', 'b', 'c', 'd'])
queue.popleft() # deque(['b', 'c', 'd']) 从头部弹出较慢,所有元素都要移位 # 列表推导式
# 使用for循环对列表中的每个元素进行表达式计算,从而生成新的列表
fruit = [' banana', ' appke ']
[f.strip() for f in fruit] #['banana', 'apple']
vec = [2, 4, 6]
[3*x for x in vec] # [6, 12, 18]
[[x, x**2] for x in vec]# [[2, 4], [4, 16], [6, 36]]
[3*x for x in vec if x > 3] #[12, 18]
vec2 = [4, 3, -9]; [x*y for x in vec1 for y in vec2] #[8, 6, -18, 16, 12, -36, 24, 18, -54]
[str(round(355/113, i)) for i in range(1, 6)] # ['3.1', '3.14', '3.142', '3.1416', '3.14159'] # 嵌套列表解析
# 将3X4的矩阵列表转换为4X3列表
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
# 方法1
[[row[i] for row in matrix] for i in range(4)]
# 方法2
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix]) # del 语句
ls = ['a', 'b', 'c', 'd', 'e', 'f']
del ls[0] # ['b', 'c', 'd', 'e', 'f']
del ls[2:4] # ['b', 'c', 'f']
del ls[:] # []
del ls # [] # 字典推导
{x: x**2 for x in (2, 4, 6)} # {2: 4, 4: 16, 6: 36}

二、运算符

1. 算术运算符: +  -  *  /  %    **(求幂)    //(整除,返回商的整数部分)

  • 5 / 2  = 2.5
  • 5 // 2 = 2
  • 5 ** 2 = 25

2. 位运算符: & | ^(异或)  ~(取反)  << (左移)   >> (右移)

3. 逻辑运算符: and or not(非)

4. 成员运算符: in 、not in

5. 身份运算符: is 、is not 

  is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

a = 20
b = 20
if ( a is b ): # True
  print ("a 和 b 有相同的标识")
if ( id(a) == id(b) ): # True
  print ("a 和 b 有相同的标识")
a = [1, 2, 3]
b = a # a is b, a和b指向同一对象
b = a[:] # a is not b, a和b指向不同对象

三、条件和循环控制语句

条件控制
def fab(n):
if n<1:
print('输入有误!') 
return -1
elif n==1 or n==2:
return 1
else:
return fab(n-1)+fab(n-2) 循环控制
# Fibonacci series: 斐波纳契数列 1,1,2,3,5,8
a, b = 0, 1
while b < 10:
print(b, end=',')
a, b = b, a+b sequence = [1,1,2,3,5,8]
for item in sequence:
print(item)
for index, item in enumerate(sequence):
print(index, item) # 求整数1-100的和
sum = 0
for i in range(0,101): # 或 for i in range(101)
sum += i
print(sum)

迭代器

  迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。字符串,列表或元组对象都可用于创建迭代器。

1.使用for循环迭代
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ") 2.使用next()函数迭代
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象 while True:
try:
print (next(it))
except StopIteration:
sys.exit()

生成器

  在 Python 中,使用了 yield 的函数被称为生成器(generator)。生成器是一个返回迭代器的函数,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,并在下一次执行 next() 返回 yield的值, 方法时从当前位置继续运行。

import sys

def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f是一个迭代器,由生成器返回生成。只需返回迭代器,而不用返回整个斐波那契列表 while True:
try:
print (next(f), end=" ") # 使用迭代器
except StopIteration:
sys.exit()

四、函数

  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,你也可以自定义函数。

1. 可更改(mutable)与不可更改(immutable)对象

  在python中,string、tuple和number是不可更改的对象,重新赋值不会修改原来的对象,而是生成一个新的对象。而list,dict等则是可以修改的对象。python函数的参数传递类似c++的参数传递,如果传的是不可变类型,则函数中的任何操作不会影响传递的对象本身。如果是可变类型如列表、字典,则类似c++的引用传递,可以在函数中修改对象的值。

1.不可变类型参数
def changeInt( a ):
a = 10 b = 2
changeInt(b)
print( b ) # 结果是 2

2.可变类型参数
def changeList( mylist ):
mylist[1]=5
return mylist = [1,2,3];
changeList( mylist );
print (mylist) # 结果是[1,5,3]

2. 函数调用

1.关键字参数: 函数调用时使用参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
fibonacci ( n = 10 ) 2.默认参数:函数定义中设置默认参数值,如果调用时没有传递参数,则会使用默认参数。默认参数要放在最后面,否则会报错。
def printinfo(name, age=35):
  print (name, age) 3.不定长参数
def printinfo(*args):
  print (args)
printinfo(1, 'Amy', 18) 4.函数参数
def printInfo () :
print ("Hello, world!")
def execute(f):
f() # 执行函数
execute(printInfo)

3. 匿名函数

  python 使用 lambda 来创建匿名函数。所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。lambda的主体是一个表达式,而不是一个代码块。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。匿名函数也能使用关键字参数和默认参数。

sum = lambda arg1, arg2: arg1 + arg2;
print ("sum = ", sum( 10, 20 ))

4. 变量作用域

  Python 中只有模块,类以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/else、for/while等)是不会引入新的作用域的,即这些语句内定义的变量,外部也可以访问。Python的作用域一共有4种,代码中的变量以 L –> E –> G –>B 的规则查找,即在局部找不到,便会去闭包找,然后是全局,再者去内建中找。

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内建作用域

  内置作用域是通过一个名为builtin的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:

>>> import builtins
>>> dir(builtins)
x = int(2.9)  # 内建作用域

g_count = 0  # 全局作用域,全局变量可以在整个程序范围内访问
def outer():
o_count = 1 # 闭包函数外的函数中
def inner():
i_count = 2 # 局部作用域,局部变量只能在其声明的函数内使用

global 和 nonlocal关键字

函数中修改全局变量
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1() 修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()

五、模块

  模块是一个包含所有你定义的函数和变量的文件(.py文件)。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

import 语句

  一个模块只会被导入一次,不管你执行了多少次import。当我们使用import语句的时候,Python解释器通过python搜索路径查找相应模块。搜索路径是在Python编译或安装的时候确定的,可以使用sys.path查看。

# calculator.py文件
def calc(a, b):
print('a + b = ', a + b)
return # test.py文件
import calculator # 导入模块
calculator.calc(1, 2) # 调用模块里的函数 import calculator
calc1 = calculator.calc # 经常使用一个函数时,可以把它赋给一个本地的名称
calc1(1, 2) from calculator import calc # 导入指定部分(函数或变量)
calc(1, 2) from calculator import * # 导入所有内容
calc(1, 2)

 __name__属性

  每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

# using_name.py
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块,被引入时不执行') >>> python using_name.py # 输出: 程序自身在运行
>>> import using_name # 输出: 我来自另一模块,被引入时不执行

dir() 函数

  内置的函数 dir() 可以找到模块内定义的所有名称,且以一个字符串列表的形式返回。如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称。

import calculator
print(dir(calculator)) # ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'calc']
print(dir()) # ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'calculator']

标准模块

  Python 本身带着一些标准的模块库,模块 sys 内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串。

Python包

  包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,最简单的情况,放一个空的 :file:__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为 __all__变量赋值。

sound/                          #顶层包
__init__.py #初始化 sound 包
formats/ #文件格式转换子包
__init__.py
wavread.py
wavwrite.py

 从一个包中导入*

  Windows是一个大小写不区分的系统,很难知道 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。然而包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。通常我们并不主张使用*这种方法来导入模块,因为这种方法经常会导致代码的可读性降低。使用_all_可以在sound/formats/__init__.py中包含如下代码:

__all__ = ["wavread", "wavwrite"]

六、输入与输出

1. 控制台输入

str = input("请输入:");
print ("你输入的内容是: ", str)

2. 格式化输出

(1) str.format()  用于设置多样化的输出格式

# 参数位置
print('{} and {}'.format('apple', 'banana')) # apple and banana, 默认顺序
print('{0} and {1}'.format('apple', 'banana')) # apple and banana, 指定参数位置
print('{1} and {0}'.format('apple', 'banana')) # banana and apple
print('{name}网址: {site}'.format(name='百度', site='www.baidu.com')) # 百度网址:"www.baidu.com", 关键字参数
print('fruits: {0}, {1} and {other}'.format('apple', 'banana', other='pear')) # 函数符号,!a表示使用ascii(), !s使用str(), !r'使用repr()
print('常量 PI 的值近似为: {!r}'.format(math.pi)) # 常量 PI 的值近似为: 3.141592653589793
# 保留小数点
print('常量 PI 的值近似为: {0:.3f}'.format(math.pi)) # 常量 PI 的值近似为: 3.142 ,保留到小数点后三位
# %操作符也可以实现字符串格式化,但是老的格式化方式,应该更多的使用 str.format().
print('常量 PI 的值近似为:%5.3f' % math.pi) # 常量 PI 的值近似为: 3.142, # 对齐方式
table = {'apple': 1, 'banana': 2, 'pear': 3}
for name, number in table.items():
print('{0:10} ==> {1:10d}'.format(name, number)) # ':' 后传入一个整数, 设置字段输出宽度
# 格式化时使用变量名而非位置
print('banana: {0[banana]:d}; apple: {0[apple]:d}; pear: {0[pear]:d}'.format(table)) # 'banana:2; apple:1; pear:3
print('apple: {apple:d}; banana: {banana:d}; pear: {pear:d}'.format(**table)) # table 变量前使用 '**' 来实现相同的功能

(2) 将值转成字符串

str() : 函数返回一个用户易读的表达形式。 repr() : 产生一个解释器易读的表达形式。

s = 'Hello, World'
str(s) # 'Hello, World'
repr(s) # "'Hello, World'"
repr('hello, World\n') # 'hello, World\n' , repr()可以转义字符串中的特殊字符
repr((1, 'desc', ('Hello', 'World'))) # repr()的参数可以是Python的任何对象 for x in range(1, 11):
print(repr(x).rjust(2)) # rjust 右对齐, 将字符串靠右, 并在左边填充空格。 类似的方法有 ljust() 和 center()
'-3.14'.zfill(7) #'-003.14'

Python基础 (上)的更多相关文章

  1. windows在python基础上安装pip

    首先你必须已经安装了python,并且配置好环境 键入pip 复制https://bootstrap.pypa.io/get-pip.py的内容并创建get-pip.py文件(该文件的内容就是刚刚复制 ...

  2. Python基础教程2上的一处打印缺陷导致的代码不完整#1

    #1对代码的完善的 出现打印代码处缺陷截图: 图片上可以看到,定义的request根本没有定义它就有了.这个是未定义的,会报错的,这本书印刷问题,这个就是个坑,我也是才发现.花了点时间脱坑. 现在发完 ...

  3. 《转》python学习--基础上

    学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginM ...

  4. Python 时间推进器-->在当前时间的基础上推前n天 | CST时间转化标准日期格式

    由于公司任务紧迫,好久没有在园子里写自己的心得了,今天偷个闲发表点简单的代码块,在开源的时代贡献微薄力量.话不多说,直接上代码块: ]) m = ]) d = ]) the_date = dateti ...

  5. python基础--14大内置模块(上)

    python的内置模块(重点掌握以下模块) 什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类 ...

  6. 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi  当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...

  7. Python基础(上)

    前言 正式开始Python之旅,主要学习内容专注在爬虫和人工智能领域,如Web开发之类将跳过不研究. Python的意思是蟒蛇,源于作者Guido van Rossum(龟叔)喜欢的一部电视剧.所以现 ...

  8. python基础===基于requests模块上的协程【trip】

    今天看博客get了一个有趣的模块,叫做 trip     #(pip install  trip) 兼容2.7版本 基于两大依赖包:TRIP: Tornado & Requests In Pa ...

  9. python实现决策树C4.5算法(在ID3基础上改进)

    一.概论 C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点.而C4.5引入了新概念"信息增益率",C4.5是选择信息增益率最大的属性作 ...

随机推荐

  1. MYSQL优化——索引覆盖

    索引覆盖:如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要进行到磁盘中找数据,若果查询得列不是索引的一部分则要到磁盘中找数据. 建表: create table test_ind ...

  2. CSS3动画设置后台登录页背景切换图片

    CSS3的动画很实用很好用,简单几句话就可以做出一个好看而且过渡平滑的body背景图片,不多说,来来来,上代码 body{ animation:mybg 7s; -webkit-animation:m ...

  3. 编写高质量代码改善C#程序的157个建议——建议34:为泛型参数设定约束

    建议34:为泛型参数设定约束 “约束”这个词可能会引起歧义,有些人肯能认为对泛型参数设定约束是限制参数的使用,实际情况正好相反.没有“约束”的泛型参数作用很有限,倒是“约束”让泛型参数具有了更多的行为 ...

  4. 20169219 实验四Android程序设计

    一.实现Linux下dc的功能,计算后缀表达式的值 public int evaluate(String expr) { int op1, op2, result = 0; String token; ...

  5. 明码——第九届蓝桥杯C语言B组(省赛)第二题

    原创 标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字 ...

  6. c# 简单委托例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. python 读取mysql存储的文件路径下载文件,内容解析,上传七牛云,内容入es

    #!/usr/bin/env python # -*- coding: utf-8 -*- import ConfigParser import json import os import re fr ...

  8. centos 重新安装python3.6之后 yum 无法使用报错

    问题: $ yum File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid ...

  9. 1、认识Socket

    专业术语定义:(不易理解浏览大体意思即可) 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本 ...

  10. ubuntu14.10,解决按照最新版Gnome 15.10后,经典Gnome桌面字体问题!

    ubuntu14.10刚安装完毕,我首先按照了经典Gnome桌面,随后我发现ubuntu软件中心里面能找到的软件明显不如先前我安装过的ubuntu了,我觉得有可能是因为我以前安装的ubuntu14.1 ...