Python学习笔记

python基础教程

python 程序技巧

  • 超过1000次的循环,不要使用for循环
  • 读取数据,计算数据,绘制数据,要分开进行
  • 要及时保存处理过程中的中间变量,将处理好的中间变量保存到磁盘,在下一阶段直接读取,会比重新跑程序快很多

ch00 python3的安装

python3 是未来的主流。python2即将停止支持,所以应当尽量使用python3。

sudo apt-get install python3-pip

然后即可使用pip3命令进行安装相关的包

推荐使用pip3安装python所依赖的包,因为这样可以避免使用root权限,又可以保证包的 都是最新的。

.py文件和.pyw的区别在于,运行.pyw调用pythonw.exe文件不会出现任何控制台窗口,也不会有任何打印 输出,所有向原有的 stdout 和 stderr 的输出都无效,所有从原有的 stdin 的读取都只会得到 EOF

值得一提的是,开发纯图形界面程序的时候,你可以暂时把 .pyw 改成 .py,以便运行时能调出控制台窗口 ,看到所有错误信息,方便除虫。

ch01

变量名

3 条规则:

  1. 只能是一个词。
  2. 只能包含字母、数字和下划线。
  3. 不能以数字开头。

变量名是区分大小写的。小写字母开头

注释

# This program says hello and asks for my name.

print()函数

print('Hello world') # 打印字符串
print()     # 打印空行

input() 等待用户输入

myName = input()

len()函数 计算字符串中字符的个数

str()、 int()和 float()函数 数据类型转换


ch02 控制流

2.1 布尔值/ 比较操作符 / 布尔操作符

但“布尔” 数据类型只有两种值: True 和 False。

== # 等于
!= # 不等于
<  # 小于
>  # 大于
<= # 小于等于
>= # 大于等于

布尔操作符 and or not

2.7 控制流语句

if / else elif

if [condition]:
    # do sth
elif [condition]:
    # do sth
else:
    # do sth

while / break continue

for / range()

for i in range(5): # 0,1,2,3,4
    print(str(i)) 
    
for i in range(12,16): # 12,13,14,15
    print(str(i)) 
    
for i in range(0,10,2): # 0,2,4,6,8
    print(str(i)) 

2.8 导入模块

import 语句包含以下部分:

import random #
import random, math # 可选的更多模块名称,之间用逗号隔开。
from random import * # 调用 random模块中的函数时不需要 random.前缀

使用完整的名称会让代码更可读, 所以最好是使用普通形式的 import 语句。

sys.exit()提前结束程序

import sys

sys.exit()

ch03 函数

定义函数

def func():
    print('Func')

函数返回值

python 的函数参数默认均是形参,并不会被改变。python编程倾向于,输入和输出分开。

局部和全局作用域

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函 数之外赋值的变量,属于“全局作用域”。

一个函数被调用时, 就创建了一个局部作用域。在这个函数内赋值的所有变量, 存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了, 这些变量就 丢失了。下次调用这个函数, 局部变量不会记得该函数上次被调用时它们保存的值。 作用域很重要, 理由如下:

  1. 全局作用域中的代码不能使用任何局部变量;
  2. 但是,局部作用域可以访问全局变量;
  3. 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
  4. 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个 名为 spam 的局部变量,和一个名为 spam 的全局变量

依赖全局变量就是一个坏习惯。

如果需要在一个函数内修改全局变量, 就使用 global 语句。

def spam():
    global eggs
    eggs = 'spam'
    
eggs = 'global' # 全局变量
spam()
print(eggs)

在一个函数中, 一个变量要么总是全局变量, 要么总是局部变量。

如何引用文件中的函数

如果程序只有一个文件,那么就基本上所有的变量都是全局变量。如果在这个文件中定义函数,极有可能会导致全局变量会被引入到函数中, 这样的函数会有错误,所以最好把函数放到单独的文件中,然后引入到主文件当中

文件fun1.py的内容

def func(a):
    a=100+100;
    return a+10;

文件main.py的内容

import fun1 # 引入fun1.py的内容
a=100
a= fun1.func(a)
print(a)

异常处理

错误可以由 try 和 except 语句来处理。那些可能出错的语句被放在 try 子句中。 如果错误发生,程序执行就转到接下来的 except 子句开始处。

def spam(divideBy):
    try:
        return 42 / divideBy
    except ZeroDivisionError:
        print('Error: Invalid argument.')
        
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

ch04 列表(list)与元组(tuple)

4.1 列表数据类型

list = [1,2,3,4,5] 
list = ['cat', 'bat', 'rat', 'elephant']
list = ['hello', 3.1415, True, None, 42] 
# 列表用左方括号开始, 右方括号结束,即[]。列表中的值也称为“表项”。表项用逗号分隔

用下标取得列表中的单个值。表后面方括号内的整数被称为“下标”。列表中第一个值的下 标是 0,

list = ['cat', 'bat', 'rat', 'elephant']
list[0] # cat
list[1000] # IndexError
list[1.1]  # TypeError
list[-1]  # 负数下标,列表的倒数第一个元素 elephant
list[0:4] # 切片下标, list[0], list[1],list[2], list[3]
list[1:3] # 切片下标, list[1], list[2]
lem(list) # 获取列表长度,4
list[1]="dog" # 用下标改变列表中的值
del(list[1]) # 删除列表中的值
[1, 2, 3] + ['A', 'B', 'C'] # 列表连接

list方法

  1. list.index()

    可以传入一个值, 如果该值存在于列表中, 就返回它的下标。

     spam = ['hello', 'hi', 'howdy', 'heyas']
     spam.index('hello') # 0
    
  2. list.append()

    将参数添加到列表末尾

  3. list.insert(index, obj)

    insert()方法可以在列表任意下标处插入一个值。 insert()方法的第一个参数是新值 的下标, 第二个参数是要插入的新值。

     spam = ['hello', 'hi', 'howdy', 'heyas']
     spam.insert(1,'hello') # 0
    
  4. list.remove()

    • 给 remove()方法传入一个值,它将从被调用的列表中删除。
    • 试图删除列表中不存在的值, 将导致 ValueError 错误。
    • 如果该值在列表中出现多次, 只有第一次出现的值会被删除。
  5. list.sort(cmp=None, key=None, reverse=False)

    • 数值的列表或字符串的列表, 能用 sort()方法排序
    • 指定 reverse 关键字参数为 True, 让 sort()按逆序排序
    • 不能对既有数字又有字符串值的列表排序, 出现TypeError错误
    • sort()方法对字符串排序时, 使用“ASCII 字符顺序”, 而不是实际的字典顺序。这意味着大写字母排在小写字母之前。因此在排序时, 小写的 a 在大写的Z之后
    • 如果需要按照普通的字典顺序来排序, 就在 sort()方法调用时, 将关键字参数 key 设置为 str.lower。
  6. list.reverse()

  7. list.count()

ch 元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

ch05 字典和结构化数据

ch06 字符串操作

str.split()    #清除默认 空格和tab  对空格数量不敏感 、
str.split(' ')  #只清除一个空格     对空格数量敏感
str.contains('字符串')

str.split()

>>> str=" AS G01  2018 03 11 00 11 30.000000  1   -0.333992115743E-04    "
>>> str
' AS G01  2018 03 11 00 11 30.000000  1   -0.333992115743E-04    '
>>> str.split()
['AS', 'G01', '2018', '03', '11', '00', '11', '30.000000', '1', '-0.333992115743E-04']
>>> str.split(' ')
['', 'AS', 'G01', '', '2018', '03', '11', '00', '11', '30.000000', '', '1', '',
'', '-0.333992115743E-04', '', '', '', '']

如果是空格分割的字符串,直接用split()就可以了

ch07 模式匹配与正则表达式

ch08 读写文件

ch09 组织文件

ch10 调试

ch11 绘图

图例

在plot()中添加label,然后指定显示图例legend()

from matplotlib import pyplot as plt
 
# 主要x 和y的个数要相同,不然会报错
x = [5,6,7,8]
y = [7,3,8,3]
 
x1 = [2,5,3,9]
y1 = [5,3,2,7]
 
# 可以设置颜色,g代表green, r代表red,y代表yellow,b代表blue,g代表black
# linewidth = 5,设置线条粗细
# label 设置线条名称
plt.plot(x, y,'b',linewidth=5,label='Line One')
plt.plot(x1, y1,'r',linewidth=8,label='Line Two')
 
# 给这个图,添加标题和XY轴名称,注意这地方不能输入中文,matplotlib应该
# 对中文支持不好,写中文,会显示乱码,方块字
plt.title('Epic Chart')
plt.ylabel('Y axis')
plt.xlabel('X axis')
 
# 显示图例
plt.legend()
 
plt.show()

版权声明:本文为CSDN博主「Anthony_tester」的原创文章,遵循 CC 4.0 BY-SA 版权协 议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/u011541946/article/details/71552335

这里就跟R语言更加方便,Data和label的绑定更加自然方便,不需要特别指定,而且默 认生成的图例也很美观

python 执行scp

os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )

Neural networks and deep learning