磨刀霍霍:我李汉三又回来写代码啦~
写在前面的话
不知不觉毕业已经三年多了,现在的工作中,极少涉及代码的工作。主要接触的项目是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本身发生了变化。