磨刀霍霍:我李汉三又回来写代码啦~

写在前面的话

不知不觉毕业已经三年多了,现在的工作中,极少涉及代码的工作。主要接触的项目是BI的建设,做的更多的类似产品经理的工作,或者比较初级的数据分析的工作。

因为没有美工和测试小伙伴,所以还额外承包了这两项工作的我,偶尔也能接触到代码,比如echarts的使用,比如sql语句的编写。除此之外,有时候还有视频制作和文案撰写的工作。整体来说,整个工作生涯算是比较“充实”,什么都尝试过,所以在即将四周年的时候,我想,我该做点改变,再不疯狂我就老了。

考虑过文案策划及后期制作的工作,但是考虑到三年累计的工作经验,且屈服于现实的状况,我还是选择继续数据分析的工作,或许这个转折也挺生硬的,
而且我其实更喜欢做后期制作的工作(例如明星大侦探里有毒的后期),但是当我做下了这个决定,我就准备努力冲啦!

我不害怕可能会有复杂的困难,我只害怕自己不曾努力,然后在老了之后才追悔莫及。

毕竟,我已经丢了三年。

所以,无论如何,加油吧!

所以下面是认真开始学习的正文

数据分析,我决定从python入手,主要的学习途径是廖雪峰的官方网站

python的简介和安装

这一步可以跳过,因为之前就已经尝试安装过。

  • 第一个python程序
    无论如何,hello world!
print('hello world!')
python交互模式和命令行模式的不同

执行.py文件只能在命令行模式下执行。
在windows下不能直接运行.py文件,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释:

#!/usr/bin/env python3

print('hello, world')

然后,通过命令给hello.py以执行权限:

$ chmod a+x hello.py

就可以直接运行hello.py了。(然鹅,现在并没有Mac,摊手)

输入和输出

print()函数可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出,遇到逗号“,”会输出一个空格。
input()函数用于输入,在输入的同时,在变量中存储了输入的参数。
input()可以显示字符串来提醒用户。

Python基础

python的注释是用#,使用缩进方式的语法,当以:结尾时,视为代码块。
按照约定俗成的管理,应该始终坚持使用4个空格的缩进。

请务必注意,Python程序是大小写敏感的,如果写错了大小写,程序会报错。

数据类型

整数浮点数字符串

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r’’表示’’内部的字符串默认不转义
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用’’’…’’’的格式表示多行内容,注意在输入多行内容时,提示符由>>>变为…,提示你可以接着上一行输入,注意…是提示符,不是代码的一部分。

布尔值 使用and or not 计算。

空值 None 但不等同与0,因为0是有意义的。

变量 可以是任意数据类型,也可以重复赋值。

  • 动态语言和静态语言的区别。静态语言在定义变量时候必须指定变量类型(eg:Java)。
  • 理解变量在内存中的表示。

常量 Python中,通常用大写的变量名表示常量。

  • 除法 地板除 求余数
10 / 3    无论除数与被除数是否为整数,结果都为浮点数
10 // 3 只取结果的整数部分
10 % 3 得出余数
字符串与编码

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

ython对bytes类型的数据用带b前缀的单引号或双引号表示

x = b'ABC'
y = 'ABC'

x与y是不同的,x是字节型的,y是str,x的每个字符只占用一个字节
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

在bytes中,无法显示为ASCII字符的字节,用\x##显示。

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。

如果bytes中包含无法解码的字节,decode()方法会报错。

如果bytes中只有一小部分无效的字节,可以传入errors=’ignore’忽略错误的字节。

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数。

1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

为了保证源文件以utf-8读出,需要在开头注释:

#!/usr/bin/env python3   ---告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
# -*- coding: utf-8 -*- ---告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

如果要保证源文件是utf-8编码,需要在编辑器中进行设定。

格式化

%和format()

使用list和tuple
  • list为有序集合。是使用方括号的朋友
  • 用len()可以获取元素个数。索引从0开始,最后一个元素的索引为len(list)-1。获取最后一个元素,还可以用-1作为索引,直接获得最后一个元素。

  • list为可变的有序表,可以append()追加元素到末尾;可以insert()到指定位置;可以pop()删除最末尾元素,参数可以为i,即索引位置;可以直接赋值给对应的索引位置list[i] = value;内里的元素类型也可以各自不同,或者为另一个list。当list里面啥都没有的时候,len(list)输出为0。


  • tuple->元祖,一旦初始化就不能修改。因为不可变,所以更安全。是使用圆括号的朋友

定义一个只有1个元素的tuple,要使用(1,),加上逗号,不产生歧义,否则可能会误认为数学计算。

t = (1,)

理解“可变的tuple”

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

其实变化的是tuple里的list的指向,所以并不是tuple本身发生了变化。