非计算机专业的同学如何半个小时搞懂py3的语法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37993251/article/details/80040703
      最近蛮多人在学python,好久没有写过东西,觉得编程语言本身并不难,所以想写写看。主要是写给非计算机专业的同学快速熟悉python这个工具,如果是计算机专业的同学最好掌握好一门语言后再来看python,会有更深刻的理解。
      再插一句,建议直接看py3了,差别不算大,唯一区别是py2看起来有些语法比较“随意”一些。我自己最开始用的py2,后来里因为tensorflow还是cuda之类的不支持2就转了3,况且3大约在未来会完全替代2。为了避免大家弄混就不介绍py2,好啦废话就说这么多,进入主题。

-----------------------------------------------------py3-------------------------------------------------------


一、python3的数据类型(6种) 10min


1、数字类型

      int      整数,仅有的一种整数类型int,表示为长整型(类似于C中各种longlongint的合体)

      bool   布尔型,Ture&False

      float   浮点型,如1.11、 1.2E-3

      complex   复数,如1+2i


2、字符串类型(String)

(1) ' ' 和 " " 没有区别           如:a = 'man'  ⇔  a = "man" 

(2) +表示直接连接字符串     如:a = 'man' ; b = '666' ; c = a+b ⇔  c = 'man666'

(3) """三引号"""" 可以声明多行字符串 不需要缩进

(4) 字符串不能改变

     使用(类似C的字符串数组)

str = 'abcdefg'

print(str)                 # 输出字符串
print(str[0:-1])           # 输出第一个到倒数第二个的所有字符
print(str[0])              # 输出字符串第一个字符
print(str[2:5])            # 输出从第个开始到第个的字符
print(str[2:])             # 输出从第三个开始的后的所有字符
print(str * 2)             # 输出字符串两次


3、基本数据类型(4种)(很重要)

     List  列表

     Tuple  元祖

     Sets   集合

     Dictionary  字典

     通常字典和列表用的多一点。(就个人使用情况来说)


①List 列表

特性(3个):可改变,使用[ a , b , .... ]声明,元素支持数字、字符串

list = [ 'abcd', 111 , 1.23, 'man', 19999.11 ]

print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (list * 2)        # 输出两次列表

list2 = '111'
l = list + list2        # 连接两个list


list内置函数:

len(list) 返回列表元素个数

max(list)/min(list) 返回列表最大/最小值

list(seq) 将元组(Tuple)转化成列表


list内置方法:

list.append(obj) 在列表末添加obj对象

list.extend(seq) 在列表末一次性添加seq序列

list.sort() 给列表排序,前提为同一种数据

list.count(obj) 计算obj在list中出现次数

list.index(obj) 找到obj在列表中第一次出现的索引位置

list.insert(index, obj) 在index处添加obj对象

list.pop(obj = list[-1]) 括号为default值,返回该删除元素

list.remove(obj) 删除列表中第一个匹配项

list.clear()/list.copy() 清空/复制列表


②Tuple 元祖(可理解为不可重写数据的list)

特性(3个):不可改变,使用( a , b , .... )声明,元素支持数字、字符串

tuple = ( 'abcd', 111 , 1.23, 'man', 19999.11 )

基本操作同list

tuple内置函数:

len(tuple) 元组中元素个数

max(tuple)/min(tuple) 元组中最大/最小元素

tuple(seq) 将列表转化为元组


③sets 集合

特性(3个):无序不可重复,使用{ a , b , .... }声明,元素支持数字、字符串

stes = { 'abcd', 111 , 1.23, 'man', 19999.11 }

a = set('abracadabra')
b = set('alacazam')
 
print(a)
 
print(a - b)     # a和b的差集
 
print(a | b)     # a和b的并集
 
print(a & b)     # a和b的交集
 
print(a ^ b)     # a和b中不同时存在的元素

# 集合如果有重复元素会自动删除


④dictionary 字典

特性(3个):无序,使用{ keya: valuea , keyb: valueb , .... }声明,元素支持数字、字符串

dict = {'name': 'www','code':111, 'site': 'www.google.com'}

基本操作:

print (dict['name'])      # 输出键为 'name' 的值
print (dict[2])           # 输出键为 2 的值
print (dict)              # 输出完整的字典
print (dict.keys())       # 输出所有键
print (dict.values())     # 输出所有值


二、python3运算符 5min


1、注释(两种):

单行注释

# 这是一个注释

多行注释(单引号和双引号在py里相同)

'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号 
'''
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号 
"""



2、算术运算符

+ - * /  加减乘除

% mod运算

x**y  幂运算,返回x的y次幂

// 取整除,返回商的整数部分


3、比较运算符(同C、JAVA、R)

> <  大于/小于

>= / <= 大于等于/小于等于

!= / == 不等于/等于

均返回bool型(Ture/False)


4、赋值运算

直接写等式(无需使用int等声明关键字)

a = 10

b = 'aaa'


5、位运算

& | ~ 按位与或非

^ 异或

<< / >> 所有数左移/右移

5、逻辑运算符

and  布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值

or  布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值

not  布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True


6、成员运算符

in  如果在指定的序列中找到值返回 True,否则返回 False

not in  如果在指定的序列中没有找到值返回 True,否则返回 False


7、身份运算符

is 判断两个标识符是不是引用自同一个对象

is not  判断两个标识符是不是引用自不同对象

**

is 与 == 区别:

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

**优先级问题同C,多出的成员、逻辑、身份运算符为最低级别,优先顺序是身份、成员、逻辑。


三、py3的关键字 5min


1、条件控制

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3


注意:条件后是冒号(:); 缩进需相同 

if 嵌套逻辑同C,但是注意缩进


2、循环语句

①while

while condition:
    statement

②for

for <variable> in <sequence>:
    <statements>
else:
    <statements>

③py特有的东东:range() 内置循环函数 + 关键字 in

数字序列:

for i in range(10):
    print(i)
for i in range(1,10):
    print(i)
#注意py里右括号边界取不到

④break、continue用法逻辑同C

for letter in 'Python':     
   if letter == 'h':
      break
   print '当前字母 :', letter
#output
当前字母 : P
当前字母 : y
当前字母 : t

四、py3迭代器(这里也是Py比较有趣的东东) iter() 5min

这个比较重要,用得好能节省很多代码量


1、先声明一点py迭代器只能无脑向后遍历

list = [1,2,3,4]

it = iter(list) #这里it类似于指向list的head指针

print(next(list)) #使用next(it)可以进行操作


2、或者是结合for使用

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")


3、遍历技巧

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(k, v)
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('What is your {0}?  It is {1}.'.format(q, a))

五、py3函数 5min


1、规则:所有函数以def开头

无return时,默认返回none

def function_name(parameters):
    function_body

2、调用函数:

同一个py文件(可称为module)直接调用函数名及参数

#附上变量作用域

x = int(1.0)  # 内建作用域
 
count = 0  # 全局作用域
def outer():
    count_outer = 1  # 闭包函数外的函数中
    def inner():
        count_inner = 2  # 局部作用域

当需要在当前py文件中引用某个module里的一个方法时:

import module

module.function_name(parameters)

这里几乎同JAVA模式

import java.lang.*;
public class class_name {
    public static void main(String[] args) {
        //其实这里不需要导包 但是为了对比导入看看
        System.out.println("statement");
    }
}

所以问题来了java和python的import长的这么像,有什么区别呢?

在python中import进来的package感觉更像是静态的类(module),换句话说就是在import进来后直接实例化了导入的模块。而在java中,往往导入之后还需要再实例化(new)一个对象,然后在对象上调用导入包的方法。综合来说python import = java static import com.packagename.* = java com.packagename.classname

当然了,python还能直接导入module里的方法

from module_name import method_name

使用的时候直接调用method_name即可


3、调用package

from package_name import py_name
#补充一个
import tensorflow as tf
#然后就是tf.method_name()
#每次都有冲动打成tfboys


4、自身调用(不知道咋怎么形容这个)

class Province:

    # 静态字段
    country = '中国'

    def __init__(self, name):

        # 普通字段
        self.name = name

是不是很眼熟。简单来说和JAVA的this作用相同,只不过在py中要显视地写进parameter中

public class Province:

    #静态字段
    private String country = "china";

    public void __init__(country) {
#普通字段
        this.country = country; 
    }


5、继承(省略)

之前看django的时候记的,主要是python现在一般也不会用来做web啦,就不花大篇幅写了,面向对象的东西实在太多。

如果能理解java,再来看py几乎区别就是在self那一块还有一些静态的方法、公有成员变量的差别。

实在想了解可以移步Python面向对象


六、py的IO操作 3min


1、打印

print('{}+{}={}'.format(1, 2,3)
print('{word1}的英文是 {word2}'.format(word1='中国', word2='china'))
print("%d" % (num))

2、写入

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


3、文件IO

好吧跟C还是差不多,返回file对象

open(filename, mode)

mode如图


要求不多 不写也是极好的=-=


这样就好其实o.o

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.readline()
print(str)

# 关闭打开的文件
f.close()

嗯对。。open+readline就差不多ok

当然了这种操作pandas里有很多

有这么厉害的包 为什么还要手写对不XD


七、py的数据结构 5min

这里和C很像很像 by the way python底层就是c(当然了如果想做也可以是vb这种)


1、stack/heap 

easy:

#用list
stack = [1, 2, 3]
#进栈
stack.append(4)
stack.append(5)
#出栈
stack.pop()
stack


2、queue

queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")           # Terry arrives
queue.append("Graham")          # Graham arrives
queue.popleft()                 # The first to arrive now leaves
queue.popleft()                 # The second to arrive now leaves
queue                           # Remaining queue in order of arrival

3、嵌套list

py3:

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

transposed = []

for i in range(4):
    transposed.append([row[i] for row in matrix])

用numpy比较容易解决 详情见numpy

import numpy as np
transposed = matrix.T


八、线程

觉得还是很有必要看一看

不过这学期有修一门课叫parallel computing

mark 等有时间再写一篇

-------------------------------------------分割线到这里结束啦------------------------------------------------

九、python机制(计算机专业)

关于python底层的一些东西可以帮助你更深入去了解一些东东 安利一个知乎专题:源码读python

得配上algorithm和data structure才带感 

可以看看专门的python方向的算法课MIT_Algorithm


十、py使用

环境:anaconda3(下载3开头的)

环境变量配置:安装会自动加上,记得再加上这个,前缀是conda的安装目录


ide:pycharm很不错,可以申请免费用(最近到期了,又得重新用校园邮箱apply),但是要玩转要很久

        当然了jupyter更好咯~ 对于新手来说 进入方式cmd:输入jupyter notebook或者是jupyter lab(win)

        最近用的是sublime+python若干插件(居然还挺凑合,比较喜欢sublime的暗黑简约风格)

----------------------------------------------------end--------------------------------------------------------


猜你喜欢

转载自blog.csdn.net/weixin_37993251/article/details/80040703
今日推荐