前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PythonforResearch | 0_语法基础

PythonforResearch | 0_语法基础

作者头像
PyStaData
发布2020-08-10 11:07:56
6160
发布2020-08-10 11:07:56
举报
文章被收录于专栏:PyStaDataPyStaData

项目介绍

一直想写一份适合经济学等社科背景、学术科研向的 Python 教程。因为学经济学的多少会对 Stata 有所了解,有一些写~代码~命令的经历,这份教程应该:

  • 简洁好理解,花最少的时间了解 Python 的核心用法;
  • 实用易操作,最好是能够看完上手即用。

在构思了一段时间之后,偶然发现 Ties de Kok 的 Get started with Python for research tutorial项目已经搭建出了我想要的框架。于是打算在这个项目的基础上进行完善,首先将其主要内容“汉化”成中文,之后对用法进行扩充、加入典型用法和案例。

原作者简介:Ties de Kok (Personal Website)为华盛顿大学福斯特商学院的助理教授,他专注于将计算机科学与实证会计研究相结合,研究兴趣是财务会计、资本市场、计算机科学、自然语言处理和经验管理会计。

变量

Python 中基础的数据类型有intfloatstr

代码语言:javascript
复制
a = 5
b = 3.5
c = 'A string'
代码语言:javascript
复制
type(a),type(b),type(c)
代码语言:javascript
复制
(int, float, str)

转换类型

代码语言:javascript
复制
int(3.6),str(5)
代码语言:javascript
复制
(3, '5')

查看类型

代码语言:javascript
复制
type(a),type(b),type(c)
代码语言:javascript
复制
(int, float, str)

打印输出

代码语言:javascript
复制
print("Hello")
代码语言:javascript
复制
Hello
代码语言:javascript
复制
print("Hello"+"World")
代码语言:javascript
复制
HelloWorld
代码语言:javascript
复制
apples = 'apples'
print("I have", 2, apples)
代码语言:javascript
复制
I have 2 apples

format 格式化输出

代码语言:javascript
复制
"{} {}".format("Hello", "World")
代码语言:javascript
复制
'Hello World'
代码语言:javascript
复制
print("{:.2f}".format(3.1415926))
代码语言:javascript
复制
3.14

数字

格式

输出

描述

3.1415926

{:.2f}

3.14

保留小数点后两位

3.1415926

{:+.2f}

+3.14

带符号保留小数点后两位

-1

{:+.2f}

-1.00

带符号保留小数点后两位

2.71828

{:.0f}

3

不带小数

5

{:0>2d}

05

数字补零 (填充左边, 宽度为 2)

5

{:x<4d}

5xxx

数字补 x (填充右边, 宽度为 4)

10

{:x<4d}

10xx

数字补 x (填充右边, 宽度为 4)

1000000

{:,}

1,000,000

以逗号分隔的数字格式

0.25

{:.2%}

25.00%

百分比格式

1000000000

{:.2e}

1.00e+09

指数记法

13

{:>10d}

13

右对齐 (默认, 宽度为 10)

13

{:<10d}

13

左对齐 (宽度为 10)

13

{:^10d}

13

中间对齐 (宽度为 10)

f-strings 格式化输出(Python 3.6)

Python 3.6 新增了 f-strings,这个特性叫做字面量格式化字符串,F 字符串是开头有一个 f 的字符串文字,Python 会计算其中的用大括号包起来的表达式,并将计算后的值替换进去。

代码语言:javascript
复制
year, p_version = 2018, '3.6'
f'The year {year} is pretty awesome with F-strings from Python {p_version}'
代码语言:javascript
复制
'The year 2018 is pretty awesome with F-strings from Python 3.6'

算术运算符

以下假设变量:a=10, b=20

运算符

描述

实例

+

加 - 两个对象相加

a + b 输出结果 30

-

减 - 得到负数或是一个数减去另一个数

a - b 输出结果 -10

*

乘 - 两个数相乘或是返回一个被重复若干次的字符串

a * b 输出结果 200

/

除 - x 除以 y

b / a 输出结果 2

%

取模 - 返回除法的余数

b % a 输出结果 0

**

幂 - 返回 x 的 y 次幂

a**b 为 10 的 20 次方, 输出结果 100000000000000000000

字符运算符

用单引号,双引号或三引号定义字符串(用于多行)

代码语言:javascript
复制
hello = 'world'
saying = "hello world"
paragraph = """ This is
a paragraph
"""

数据结构

Python 有四种基本的数据结构:列表(list)、元组(tuple)、字典(dict)和集合(set)。

列表

列表放在中括号([])中

代码语言:javascript
复制
pets = ['dogs', 'cat', 'bird']
pets.append('lizard')
pets
代码语言:javascript
复制
['dogs', 'cat', 'bird', 'lizard']

元组

元组括在括号(())中,元组不支持任意添加或删除元素,但是它们更快并且消耗更少的内存。

代码语言:javascript
复制
pets = ('dogs', 'cat', 'bird')
pets
代码语言:javascript
复制
('dogs', 'cat', 'bird')

字典

字典使用大括号({})构建,字典是无序的,但具有键(Key),值(value)对。

代码语言:javascript
复制
person = {'name': 'fred', 'age': 29}
print(person['name'], person['age'])
代码语言:javascript
复制
fred 29
代码语言:javascript
复制
person['money'] = 50
del person['age']
person
代码语言:javascript
复制
{'name': 'fred', 'money': 50}

集合

集就像一个列表,但只能包含唯一值。

代码语言:javascript
复制
pets_1 = set(['dogs', 'cat', 'bird'])
pets_2 = set(['dogs', 'horse', 'zebra', 'zebra'])
pets_2
代码语言:javascript
复制
{'dogs', 'horse', 'zebra'}

集合可以用于完成许多有用的操作:

代码语言:javascript
复制
pets_1.union(pets_2) # 并集
代码语言:javascript
复制
{'bird', 'cat', 'dogs', 'horse', 'zebra'}
代码语言:javascript
复制
pets_1.intersection(pets_2) # 交集
代码语言:javascript
复制
{'dogs'}
代码语言:javascript
复制
pets_1.difference(pets_2) # 补集
代码语言:javascript
复制
{'bird', 'cat'}

组合

基本的数据结构几乎可以处理任何 Python 项目。

代码语言:javascript
复制
combo = ('apple', 'orange')
mix = {'fruit' : [combo, ('banana', 'pear')]}
mix['fruit'][0]
代码语言:javascript
复制
('apple', 'orange')

切片

如果对象是有序的(例如列表或元组),则可以选择索引:

代码语言:javascript
复制
pets = ['dogs', 'cat', 'bird', 'lizzard']
代码语言:javascript
复制
favorite_pet = pets[0]
favorite_pet
代码语言:javascript
复制
'dogs'
代码语言:javascript
复制
reptile = pets[-1]
reptile
代码语言:javascript
复制
'lizzard'
代码语言:javascript
复制
pets[1:3]
代码语言:javascript
复制
['cat', 'bird']
代码语言:javascript
复制
pets[:2]
代码语言:javascript
复制
['dogs', 'cat']

切片也适用于字符串:

代码语言:javascript
复制
fruit = 'banana'
fruit[:2]
代码语言:javascript
复制
'ba'

函数

Python 可以接收输入的参数,通过定义逻辑和操作来处理输入(并可能返回某些内容)。

代码语言:javascript
复制
def add_5(number):
    return number + 5

定义函数的操作不会执行代码,仅在调用函数后才会执行:

代码语言:javascript
复制
add_5(5)
代码语言:javascript
复制
10

也可以添加具有默认值的参数:

代码语言:javascript
复制
def add(number, add=5):
    return number + add
代码语言:javascript
复制
add(10, add=3)
代码语言:javascript
复制
13

lambda 函数

代码语言:javascript
复制
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs)
代码语言:javascript
复制
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

空格(代码块)

Python 使用缩进来区分代码块。注意,子代码块有自己的作用域(local scope),注意下方示例的a

代码语言:javascript
复制
def example():
    a = 'Layer 1'
    print(a)

    def layer_2():
        a = 'Layer 2'
        print(a)

    layer_2()
代码语言:javascript
复制
example()
代码语言:javascript
复制
Layer 1
Layer 2

条件

代码语言:javascript
复制
grade = 95
if grade == 90:
    print('A')
elif grade < 90:
    print('B')
elif grade >= 80:
    print('C')
else:
    print('D')
代码语言:javascript
复制
C

循环

代码语言:javascript
复制
for num in range(0, 6, 2):
    print(num)
代码语言:javascript
复制
0
2
4
代码语言:javascript
复制
list_fruit = ['Apple', 'Banana', 'Orange']
for fruit in list_fruit:
    print(fruit)
代码语言:javascript
复制
Apple
Banana
Orange
代码语言:javascript
复制
for num in range(100):
    print(num)
    if num == 2:
        break
代码语言:javascript
复制
0
1
2

也可以使用while循环:

代码语言:javascript
复制
count = 0
while count < 4:
    print(count)
    count += 1
代码语言:javascript
复制
0
1
2
3

遍历列表中的元组:

代码语言:javascript
复制
tuple_in_list = [(1, 2), (3, 4)]
for a, b in tuple_in_list:
    print(a + b)
代码语言:javascript
复制
3
7

在字典中循环:

代码语言:javascript
复制
dictionary = {'one' : 1, 'two' : 2, 'three' : 3}
for key, value in dictionary.items():
    print(key, value + 10)
代码语言:javascript
复制
one 11
two 12
three 13

推导式

推导式可以使用循环很方便的生成列表和字典。

列表推导式

代码语言:javascript
复制
new_list = [x + 5 for x in range(0,6)]
new_list
代码语言:javascript
复制
[5, 6, 7, 8, 9, 10]

传统方式的等效操作为:

代码语言:javascript
复制
new_list = []
for x in range(0,6):
    new_list.append(x + 5)
new_list
代码语言:javascript
复制
[5, 6, 7, 8, 9, 10]

字典推导式

代码语言:javascript
复制
new_dict = {'num_{}'.format(x) : x + 5 for x in range(0,6)}
new_dict
代码语言:javascript
复制
{'num_0': 5, 'num_1': 6, 'num_2': 7, 'num_3': 8, 'num_4': 9, 'num_5': 10}

传统方式的等效操作为:

代码语言:javascript
复制
new_dict = {}
for x in range(0,6):
    new_dict['num_{}'.format(x)] = x + 5
new_dict
代码语言:javascript
复制
{'num_0': 5, 'num_1': 6, 'num_2': 7, 'num_3': 8, 'num_4': 9, 'num_5': 10}

异常处理

Python 异常报错如下:

代码语言:javascript
复制
num_list = [1, 2, 3]
num_list.remove(4)
代码语言:javascript
复制
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-223-926b625f5509> in <module>
      1 num_list = [1, 2, 3]
----> 2 num_list.remove(4)


ValueError: list.remove(x): x not in list

可以使用tryexcept捕获异常:

代码语言:javascript
复制
try:
    num_list.remove(4)
except:
    print('ERROR!')
代码语言:javascript
复制
ERROR!

将错误类型指定为:

代码语言:javascript
复制
try:
    num_list.remove(4)
except ValueError as e:
    print('Error: ', e)
except Exception as e:
    print('Other error: ', e)
finally:
    print('Done')
代码语言:javascript
复制
Error:  list.remove(x): x not in list
Done

导入库

代码语言:javascript
复制
import math
math.sin(1)
代码语言:javascript
复制
0.8414709848078965
代码语言:javascript
复制
import math as math_lib
math_lib.sin(1)
代码语言:javascript
复制
0.8414709848078965
代码语言:javascript
复制
from math import sin
sin(1)
代码语言:javascript
复制
0.8414709848078965

系统操作

代码语言:javascript
复制
import os

获取当前路径

代码语言:javascript
复制
os.chdir(r'D:\\PyStaData\\Python\\Python_for_Research\\PythonforResearch')
os.getcwd()
代码语言:javascript
复制
'D:\\PyStaData\\Python\\Python_for_Research\\PythonforResearch'

输出当前路径文件(夹)

代码语言:javascript
复制
os.listdir()[:5]
代码语言:javascript
复制
['.ipynb_checkpoints', '0_语法基础.ipynb', 'data', 'images']

结合列表推导式进行文件类型过滤:

代码语言:javascript
复制
[file for file in os.listdir() if file[-5:] == 'ipynb'][:5]
代码语言:javascript
复制
['0_语法基础.ipynb']

更改路径

代码语言:javascript
复制
os.chdir(r'D:\\PyStaData\\Python\\Python_for_Research\\PythonforResearch\\data')
os.getcwd()
代码语言:javascript
复制
'D:\\PyStaData\\Python\\Python_for_Research\\PythonforResearch\\data'

r'path'表示原始字符串,原始字符串不将\视为特殊字符。

文件输入与输出

打开文件的四种模式:

w -> write only r -> read only w+ -> read and write + completely overwrite file a+ -> read and write + append at the bottom

代码语言:javascript
复制
with open('new_file.txt', 'w') as file:
    file.write('Content of new file. \nHi there!')
代码语言:javascript
复制
with open('new_file.txt', 'r') as file:
    file_content = file.read()
代码语言:javascript
复制
file_content
代码语言:javascript
复制
'Content of new file. \nHi there!'
代码语言:javascript
复制
print(file_content)
代码语言:javascript
复制
Content of new file.
Hi there!
代码语言:javascript
复制
with open('new_file.txt', 'a+') as file:
    file.write('\n' + 'New line')
代码语言:javascript
复制
with open('new_file.txt', 'r') as file:
    print(file.read())
代码语言:javascript
复制
Content of new file.
Hi there!
New line

最好使用with,因为它会自动关闭文件。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyStaData 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目介绍
  • 变量
    • 转换类型
      • 查看类型
      • 打印输出
        • format 格式化输出
          • f-strings 格式化输出(Python 3.6)
          • 算术运算符
          • 字符运算符
          • 数据结构
            • 列表
              • 元组
                • 字典
                  • 集合
                    • 组合
                    • 切片
                    • 函数
                      • lambda 函数
                      • 空格(代码块)
                      • 条件
                      • 循环
                      • 推导式
                        • 列表推导式
                          • 字典推导式
                          • 异常处理
                          • 导入库
                          • 系统操作
                            • 获取当前路径
                              • 输出当前路径文件(夹)
                                • 更改路径
                                • 文件输入与输出
                                相关产品与服务
                                NLP 服务
                                NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档