漫谈python基本语法

漫谈python基本语法

python环境安装

古语有云:“工欲善其事,必先利其器”。所以你想进行python编程的话,你必须要有python的编译环境。(当然在线编译器也不是不可),这个自己可以在网上去搜寻,挺多的。我个人推荐pycharm+anaconda

python的基本语法及基本操作

ps:下面我按照《python编程------从入门到实践》partⅠ的目录来简要的说明一下python的基本语法以及简单的操作,顺便巩固一下自己的知识架构

chapter01.变量和简单的数据类型

  • 在python中没有繁琐的定义变量的过程,想用什么直接定义就可以了,如:

    message='i love python'
    

    这个message就可以直接定义就可以了,总之python定义变量还是比较简单的

  • python中还是对变量的名称还是有一定的要求的:变量名只能包含字母,下划线和数字,可以以字母和下滑线打头但是不能以数字打头;变量名中不能出现空格,但能使用下划线来分隔其中的单词;不要将python关键字和函数名用作变量名;变量名需要简洁而且带有描述性;慎用小写字母l和大写字母O,这样可能会被误认为数字0和1

  • 字符串可以是直接用引号括起的,引号包括单双引号

  • 如果你需要在字符串中用到变量,那么就需要用到这个

    f'其他的字符串{变量}其他的字符串'
    

    需要注意的是f语法是python3.6引进的,其之前的版本是format(),format的语法是

    '{} {}'.format(变量,变量) 
    

    然后将花括号依次替换为后面的变量,看起来还是比较麻烦的。

  • 在python中带有小数点的称为浮点数

  • 两个数相除,无论除数和被除数是否为整数,所得的结果都是浮点数

  • 在python中**表示乘方运算,如3**2结果为9

  • 如果一个数很大,可以在数于数之间加上下划线以便区分,如1_000_000

  • python还支持同时赋值

    x,y,z=1,2,3
    
  • python中的注释为”#“

chapter02.列表简介

列表,简单的来说就像是c中数组,如:

list=['python','c','java']

简单来说像出现了[ ]的这种一般就是列表,同时这也是列表的一种特征

  • 遍历列表
lists=[1,2,3,4]
for list in lists:
    print(list)
  • 访问列表元素直接列表名[索引]

  • index(索引)是从0开始的,不是从1开始,类比C语言等其他语言

  • 添加元素:调用append()方法

    list.append('Helloworld')
    
  • 插入元素:insert(索引,插入的字符or数字)方法

    list.insert(0,'hello')
    
  • 删除元素:remove(),pop(),del

    list.remove('hello')  #hello字符被删除
    list.pop()  #最后元素被弹出,当然也可以指定index,弹出的元素可以被访问
    del list[index] #index是索引
    
  • 对列表排序:调用sort(),只是临时排序的化调用sorted()函数,当然也可以对排序的列表进行逆序处理,在其中加入reverse=True的参数

    list.sort()
    sorted(list)
    # 逆序
    list.sort(reverse=True)
    
  • 逆序:直接调用reverse()方法

  • 求长度调用函数:len()函数

chapter03.操作列表

遍历在chapter02以及说过了,这里就不说了。

  • 创建数值列表:

    利用range函数,range(1,6)表示1–5,不包括6。range()函数在for循环中用到的很多。

    for i in range(1,10):
        print(i)
    

    这里就会打印1到9.

    对于创建数值列表,可以直接使用list()函数来将range()函数来转化为列表

    list=list(range(1,3))
    

    结果是:[1,2],这样就算是创建了一个列表

    同时range函数可以指定步长,就是相当于公差,一般是1,这个你可以自己指定。

  • 对列表进行一些简单的操作

min()找min,max()找max,sum()求和

  • 使用切片操作对列表进行遍历或相关操作:

    如:

    list=['a','b','c']
    print(list[0:2])
    

    结果:[‘a’,‘b’]

    那么就会到原list列表进行切片操作,第一个参数是起始位置,第二个是结尾位置(不包括),其实还有第三个参数:步长;总的来说类比range就行。

    列表名[ : ]就是整个列表

    总的来说,列表的切片还是用的比较频繁的。

  • 复制列表

list=[1,2,3,4]
lists=list   #这样复制的话,lists其实就是lists是list的别名,当lists被改变时,list也会改变

为解决上述问题,推荐利用切片来进行复制,这样的话就是重新创建一个新的列表,并且和被复制的列表一样

list=[1,2,3]
lists=list[:]

列表讲述完了,下面简述一下元组

元组其实和列表很想,但是元组是使用的小括号(),而且元组的元素是不允许修改的(元组就是不可以被修改的列表),只能被重新赋值

list=('hello','world')

这就是一个简单的元组,当你尝试去修改时就会出现traceback,因为元组是不可以被修改的,想修改的话就只能赋值

list=('HELLO',"WORLD")

当然单个修改也是可以的。

chapter04.if语句

其实这个没有什么好说的,大部分的语言都是有的,这里展示一下基本格式

a=10
if a>5:
    print('a是大于5的') 
else:
	print('a小于5')

这就是其的基本格式。当然需要用到多个分支的话,可以利用elif这个关键字

python中的if语句还是比较便捷的,这里提一种

list=['a','b','c']
if 'a' in list:
    print('在列表中')
else:
    print('不在')

还是比较人性化的。其他的相关操作也类似,简单的看下就行

chatper05.字典

其实就是一个键值对,一个键对应一个值

people={
    'name':'HelloWorld',
    'address':'HuNan'
}

这个就是一个简单的字典

如果你想访问字典中的一个键所对应的值:你可能是这么访问people[‘phone’],这样访问是没有问题,但是phone这个键没有就会出错,所以一般推荐利用get( )方法,譬如:people.get(‘phone’),当字典中没有这个键的时候就会返回None,当然你也可以在get的第二个参数中写没有,返回的说明。

利用items()的这个方法可以返回键和值

for i,j in people.items():
    print(f'{i}:{j}')

同样,如果你想用到键,调用keys()方法;对于值的话,调用values();这两种其实是返回一个列表,如果你想其中没有重复的元素,可以调用set()函数,那么就会不含重复的元素

最后就是字典的相关嵌套,很简单,自己试试就行

chatper06.用户输入和while循环

对应任何一个程序,总是需要输入的。python也不例外,可以通过input('解释性语言')来进行输入的操作

这里需要注意的是,所有输入的都是字符串,如果需要用到数值,利用int()等函数进行转化即可

然后对于while循环其实没什么好说的,和其他的编译语言大同小异

简单的说一下格式:

while True:
    print('hello')

嗯,就是这样。

当然像break,continue这个关键字python中也是可以用的

chapter07.函数

python中也是支持函数的

格式

def name(first,last):
    long_name=f'{first} {last}'
    return long_name

这个就是基本的格式,当然也可以不需要return,这个也不是必须的

python中在向形参传递参数的时候不一定需要按照顺序进行传递,你可以通过关键字实参来进行解决:

name(last='world',first='hello')

就是这样。

python中还支持形参的默认值,当实参未传递该参数的时候,那么就直接利用这个default,如果传递了的话,就利用传递的值:

def name(first,last='world'):
    long_name=f'{first} {last}'
    return long_name

还用就是当实参中传递了多个参数(多个实参),那么在函数就必须是这样:

def name(*test):
    xxxxxxxxx
    xxxxxxxxx

这里*test,其实创建一个test的元组来存储这些数据。

如果传递的是多关键字实参的话,那么函数就是这样:

def name(**test):
    *********
    *********

这个其实是创建一个test的字典,来存储关键字实参,键值互相对应关键字(嗯,应该是这个意思)

最后就是导入函数模块:

首先创建一个只有函数的模块,然后新建一个.py的文件,在这里面导入就行,导入的方法有这么几种:

  • 导入整个模块:import modul_name,在引用的时候这样使用modul_name.function_name()

  • 导入单个函数:from modul_name import function_name,这样直接调用这个函数就行了

  • 导入多个函数:from modul_name import function_name,function_name1(),…

  • 导入所有的函数:from modul_name import *

    然后可以通过as关键字来对function_name or modul_name进行重命名,便捷操作

chapter08.类

python也能面向对象编程,所谓面向对象就是通过定义对象的行为来进行编程,可以提高工作效率。

学习这个的同时可以通过java中一些概念来进行理解

格式:

class Test:
    def __init__(self,name,age):
    	self.name=name    
        self.age=age
	def sit(self):
        print(f'{self.name} is now sitting')
	def roll_over(self):
        print(f'{self.name} rolled over')

一般来说,类是需要大写的,在类的定义的看着和函数很像的叫”方法“,一般是必须有__init__(self,其他的参数),init前面和后面都有两个下划线,这是一个特殊的方法,在创建实列的时候,python一般会先执行这个方法,这个方法一般都是为属性(属性就是创建实例之后可以被使用的变量)进行赋值;另外在每一个方法的参数中__self__这个参数是必须需要的,但是通过实参传递的时候不需要向这个参数传递参数,因为self会自动传递

创建实例:test=Test('hello',19),就是这样来进行创建, 然后就可以通过test来进行访问class中的方法了。

有些属性无需通过实参向形参传递,可以在__init__(self)中直接将属性赋值为一个default的值

然后既然是可以创建类,那么就存在继承,父类又叫超类(superclass),继承的方法很简单,就是class Test(父类名),这样就可以了。像java中一样,python中也存在super()这个函数,用于在子类中调用父类的方法。一般就是在__init__(self)这个方法中用到。

对应继承的父类的方法如果不满足其需求,可以将其修改,也就是重写,很简单,直接重新写一遍即可。然后调用的时候会调用这个被重写的这个方法。

最后就是导入class

可以直接参考前面的函数那里,将function_name替换为class_name即可。

chapter09.文件和异常

对文件的读写操作,w写,a附加,r读,r+读写

对应读写文件直接调用open(文件位置)函数,open函数不加参数的话默认就是只读模式,当其访问文件是会返回这个文件的对象的,然后将其赋给某一个变量。

with open(filename) as file_object:

就像这样,如果像读文件的话,直接用read()方法,如content=file_object.read(),然后打印content即可,但是这样可能会出现空行这种东西,这个其实是因为read()方法处理的时候,将文件后面的一个空字符串给读入了,然后反应出来就是一个空行。处理的话其实很简单,直接利用strip()方法就可以了(针对于content);对于读文件,其实也可以直接用那个表示文件的对象(file_object),还有就是利用readlines()函数来进行处理,这个是每读一行然后将其存到一个列表中去。

写文件的话,在open函数中添加第二个参数即可,也就是’w’,然后利用write()方法来进行写入,如:

with open(filename,'w') as f:
    f.write('hello,i love python')

这样的话就可以写入了,注意:如果不存在文件的话,就会创建一个文件;反之,写入,但是会覆盖原文件的内容;

对于附加模式,也就是不覆盖原文件,写入的内容会直接添加到后面,不会覆盖。

对于异常处理,也就是来处理一些错误的,像除数为0,找不到文件等等,这种主要就是利用try-except这个代码块:

x=5
y=0
try:
    print(x/y)
except ZeroDivisionError:
    print('you can not divide by zero')

大致的格式就是这样,其实还有else的这个模块,用来表示没出异常时执行的分支。

当使用了try-except-else代码块之后,出现了异常就不会出现traceback,仍然可以执行,也就是执行except这个分支的语句,如果你不想在user面前展示,那么利用pass关键字直接静默掉,这样user就看不到了,这就是异常的处理了。

最后就是存储数据,建议利用json这个模块来进行存储,.json的文件格式可以被多种语言所调用,便于和使用其他编程语言的人分享。

json.dump() json.load() 这两个来进行存储和访问。

dump方法需要两个参数,一个存储的数据,二是表示文件个那个对象(像之前的那个file_object),如:

import json
with open('test.json','w') as f:
    json.dump('hello',f)

嗯,这样就可以写入了

对于load方法,只需要读取文件对象即可

import json
with open('test.json') as f:
    mid=json.load(f)
print(mid)

这样也就行了。

还有就是对于文件路径:相对和绝对:

相对也就是相对于打开的文件而言的,相当于把此时的目录作为根。绝对就没什么好说的了,从根目录开始写即可

windows下路径用反斜杠\,同时也得注意转义字符,所有一般还是利用两个反斜杠\\

chapter10.测试代码

这个其实也就是测试编写的代码是否能过通过样例,有点类似用oj上判题的那种

一般来说,测试就是手动的;但是python提供了一个高效的方法。

下面来说一下如何编写测试代码,

首先导入unittest,然后导入这个函数or类,然后开始编写class,并且继承unittest.TestCase这个父类;然后编写方法,这个方法必须以test_xxxxx的这种格式,然后再测试时python会自动调用test_开头的这些方法,如果是需要测试的是类,建议先编写setUp(self)这个方法,这样就可以来减少创建的多个实例的麻烦,尤其是存在多个测试的时候,简单而言也就是将实例用作属性。在这些方法中调用被测的函数,来和已知的结果进行比较,通过unittest中自带的一些方法,如:

方法用途
assertEqual(a,b)核实a==b
assertNotEqual(a,b)核实a!=b
assertTrue(x)核实x为True
assertFalse(x)核实x为False
assertIn(item,list)核实item在list中
assertNotIn(item,list)核实item不在list中

然后调用即可:

name.py

def name1(first,last):
    sen=f'{first},{last}'
    return sen

test.py

import unittest
from name import name1

class Test(unittest.TestCase):
    def test_name(self):
        mid=name1('hello','world')
        self.assertEqual(mid,'hello,world')
        
if __name__=='__main__':
    unittest.main()

这也就是一个基本的格式,类也是差不多,依葫芦画瓢。

对于下面个__name__=='__main__'解释一下,当test.py以主程序执行时那么这个就需要等于__main__,如果被测试文件导入,那么就不能等于__main__,也就不能去执行unittest.main()。

好了,到这里总结也就告一段落了,可能写的也不是很好,但是这也是我现在对python的一点小总结,小理解,有问题还请海涵

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmc曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值