python学习——主要的代码结构,模块和包

前言

今天来复习一下python的代码结构、python模块与包和程序

一、python的代码结构

在很多计算机编程语言中会用{}花括号来划分代码段,同时会使用缩进使得代码更加具有可读性
python的设计者在设计python的时候就直接使用缩进来进行代码分段(这点是需要注意的)

1.1注释#与反斜杠\链接

python中使用#进行单行注释,在一行中注释过长的时候就可以使用\来连接到下一行
‘’’ ‘’'三引号多行注释

1.2if elif else

if 1>2:
	print("yes!")
else:
	print("no!")#注意if 后直接跟表达式,而且有:号,下一行缩进表示分段

1.3while、for、continue、else

while:

cnt = 0
while cnt < 5 :
    print(cnt)
    cnt += 1

for:

for i in list1:
    print(i)

for i in 'cat':
    print(i)

运行结果是1 2 3 c a t
列表、字符串、元组、字典、集合等都可以是迭代对象,在python中for迭代是非常常见的形式

#对字典的迭代,默认迭代键
dic1 = {'a':1,'b':2,'c':3}
for i in dic1:
    print(i)

#可以使用dic1.values()函数来迭代字典中的值
for value in dic1.values():
    print(value)

#可以使用items()函数以元组的形式返回键值对
for item in dic1.items():
    print(item)

运行结果
退出循环break,跳过当前一轮循环continue

结合else:

cnt = 0
while cnt >= 5:
	cnt += 1
	print('yes')
	if cnt = 3:
		break
else:
	print("循环正常结束"

只有当循环完全进行到底之后才会执行和while(或for)相对应的else中的语句

1.4zip()、range()

zip()函数可以实现同时对多个序列进行迭代

list1 = [1,2,3,4,5]
list2 = ['一','二','三','四','五']
list3 = ['one','two','three','four']

for number,ch,en in zip(list1,list2,list3):
    print(number,ch,en)

在这里插入图片描述
zip()函数在最短的序列“用完”时就会停止

range()函数返回在特定区间的自然数序列
range(start,end,step)左闭右开

for i in range(0,2):#注意py中是要有冒号的
	print(i)

start默认值为0,step默认值为1

zip(),range()这样的函数返回的是一个可迭代的对象

1.5列表、字典、集合、生成器推导式

1.列表推导式

#简单形式
[expression for item in iterable]
#加上条件的列表推导式
[expression for item in iterable if condition]

例:

number_list = [number for number in range(0,11)]
number_list2 = [number for number in range(1,12) if number % 2 == 0]
#对元组列表的迭代
rows = range(1,4)
cols = range(1,3)
cells = [(row,col)for row in rows for col in cols]

2.字典推导式

{key_expression : value_expression for expression in iterable}
{key_expression : value_expression for expression in iterable if condition}
#字典推导也有if条件判断和多个for循环迭代语句

3.集合推导式
4.生成器推导式

1.6函数、生成器、装饰器

1.函数
(1)函数的定义

def fun1():
    print("这是定义的一个函数")

fun1()

(2)函数的参数
位置参数:按照位置对应传参

def fun1(a,b,c):
    print("这是定义的一个函数")
    print("参数{}".format(a))
    print("参数{}".format(b))
    print("参数{}".format(c))
fun1(1,2,3)

补充:字符串format格式化

print("{} {} {}".format(1,2,3))
print("{2} {1} {0}".format(1,2,3))
print("{a} {b} {c}".format(a = 3, c = 1 , b = 2))
a = 12
b = 12.121
print("{:.2f}".format(a))
print("{:d}".format(int(b)))

关键字参数:调用函数时,传参指定对应参数的名字

指定默认参数值
(3)匿名函数lambda函数
lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。

#举一个简单的例子
def fu3(words,func):
    for word in words:
        print(func(word))
stairs = ['thud','meow']
def enliven(word):
    return word.capitalize() + '!'
fu3(stairs,enliven)

#如果使用lambda函数写
fu3(stairs,lambda word:word.capitalize() + '!')

2.生成器、装饰器

1.7命名空间和作用域,try和expect处理错误

1.命名空间和作用域
一个名称在不同的使用情况下可能指代不同的事物。
在py中有很多命名空间,指的是在某个或者某段程序内的一个名称是唯一的,和其他命名空间的同名的变量等是无关的,相互独立。

numbera = 1
def print_number():
    numbera = 2
    "实际上在这里改变的仅是此函数内部的命名空间的numbera"
    print('Hi ! The numbera in the function"function"is: {}'.format(numbera))

print_number()
print("And the numbera in the main is:",numbera)

def print_number2():
    global numbera
    "加一个关键字global声明"
    numbera = 2
    print('Hi ! After global The numbera in the function"function"is: {}'.format(numbera))
print_number2()
print("And the numbera in the main is:",numbera)

运行结果如下
在这里插入图片描述
2.使用try和expect处理错误
在python中使用异常,当错误发生时,执行某一段代码。
当执行出错的代码的时候,需要适当的异常处理程序用于阻止潜在的错误发生.
在异常可能发生的地方添加异常处理程序,明确错误,记录运行环境并且停止程序执行。

list1 = [0,1,2,3]
p = 4
try:
    list1[p]
except:
    print('need a p between 0 and',len(list1))

在try中的代码会执行,如果存在错误就抛出异常,然后执行expect中的代码,否则跳过expect代码。

上面的expect无参数适用于任何异常类型,但是这样的处理方式会比较泛化(类似于直接输出,“发生了一个错误”)

有的时候需要除了异常类型以外其他的异常细节,可以使用下面的格式获取整个异常对象:except exceptiontype as name

'''下面一个例子会先去寻找是否有indexerror,因为它是由索引一个序列
的非法位置抛出的异常类型,讲一个indexerror异常赋值给err,把其他的
赋值给other,事例中会输出说有存储在other中的该对象的异常'''
s_list = [1,2,3]
while True:
    value = input('position [q to quit] ? ')

    if value == 'q':
        break
    try :
        position = int(value)
        print(s_list[position])
    except IndexError as err:
        print('Bad index : ',position)
    except Exception as other:
        print('someting else broke',other)

3.编写自己的异常
前面所讲到的所有异常(例如IndexError)都是在Python领域或者它的标准库中提前定义好的。根据自己的目的可以使用任一的异常类型,同时自己定义异常类型,用来处理程序比重可能出现的特殊情况

二、模块、包、程序

1.模块、import

1.模块
一个模块是一个python文件
引用其他模块的代码使用import语句,被引用的模块中的代码就相当于插入进这个程序中
2.导入模块
import 模块
模块 是不带.py扩展的另一个python文件的文件名

下面是a.py文件

def fun1():
    pass

在另一个文件中想要使用a.py的fun1()函数
b.py

import a
a.fun1()//把a.作为fun1的前缀

3.使用别名导入模块import aaaaa as a
其中aaaaa.py是模块,在上面语句之后就可以a.fun1(),而避免aaaaa.fun1(),防止同名出现
4.导入模块的一部分

from a import fun1
#或者以别名形式导入一部分
from a import fun1 as f1

2包

为了使python应用更具有可拓展性,可以把多个模块组织成文件层次,称为包。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rds.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值