python 基础二(学习打卡)

python 基础二(学习打卡)

python基础知识

    • python 基础二(学习打卡)
  • 一.None值
  • 二.函数返回多个值
  • 三.局部变量和全局变量
  • 四.异常处理(内含Zigzag代码)
  • 五.列表
  • 六.字典
  • 七.类

一.None值

在python中有一个值称为None,它表示没有值,就像bool值True 和 False一样,None的首字母 N必须大写。print()函数的返回值就是None。

spam=print('Hello')
None==spam##输出True

对于所有没有return语句的函数定义,Python 都会在末尾加上 return None,而且使用不带值的Return 语句(也就是return 关键字本身),也返回None。

二.函数返回多个值

python函数可以返回多个值

def divid(a,b):
	shang=a//b
	yushu=a%b
	return shang,yushu
sh,yu=divid(5,2)

当python返回多个值的时候,赋值时也要有同样多的变量来接收。

三.局部变量和全局变量

1.名字相同的局部变量和全局变量

def spam():
    egg = 'spam local'
    print(egg)
    
def bacon():
    egg = 'bacon local'
    print(egg)#print 'bacon local'
    spam()
    print(egg)#print 'bacon local'
    
egg='global'
bacon()
print(egg)##print 'global'

输出结果如下:

bacon local
spam local
bacon local
global

从技术上讲,在Python中让局部变量和全局变量同名是完全合法的,但想要程序简单就得避免这么做,因为这3个独立的变量都有相同的名字egg,追踪某一个时刻使用的是哪一个变量,可能会比较麻烦。
2.global语句
在一个函数内修改全局变量,就使用global语句。

def spam():
    global egg
    egg = 'spam local'
    
egg='global'
spam()
print(egg)##print 'spam local'

因为egg在spam函数的顶部被声明为global,所以当egg被赋值为‘spam local’时,赋值发生在全局作用域的egg上,没有创建egg局部变量。

四.异常处理(内含Zigzag代码)

在Python中遇到异常或者错误,就意味着整个崩溃,在真实世界的程序中,希望程序能检测错误,处理它们然后继续运行。
例如,运行下面程序,它有一个“除数为0”的错误

def spam(di):
    return 40/di

print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

运行结果如下:

20.0
3.3333333333333335
ZeroDivisionError: division by zero

当试图用一个数除以0时,就会发生ZeroDivisionError错误。错误可以由tryexcept语句来处理,可以将前面除数为0的代码放在一个try语句中,如果错误发生,程序执行就转到接下来的except子句开始处。

def spam(di):
    try:
        return 40/di
    except ZeroDivisionError:
        print('Error')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

结果如下:

20.0
3.3333333333333335
Error
None
40.0

如果在try子句中的代码导致一个错误,程序执行就立即转到except子句的代码中,在运行那些代码之后,执行照样继续。

Zigzag 描述:创建往返的锯齿状图形,直到用户按Ctrl-C快捷键停止它为止
分析:在运行Python程序的同时按Ctrl-C快捷键会引发KeyboardInterrupt异常,因此我们可以用try,except语句来终止程序。这样即使主程序循环是一个无限循环,用户也可以关闭程序。

import time,sys
indent=0
indentIncreasing = True
try:
    while True:
        print(' '*indent,end=' ')#会输出indent个空格
        print('******')
        time.sleep(0.1)##循环输出休眠100毫秒
        
        if indentIncreasing:
            indent=indent+1
            if indent==5:
                indentIncreasing=False
        else:
            indent=indent-1
            if indent==0:
                indentIncreasing=True
except KeyboardInterrupt:
    sys.exit()

运行结果:

 ******
  ******
   ******
    ******
     ******
      ******
     ******
    ******
   ******
  ******
 ******
  ******

五.列表

知识点:列表的正负索引,len()函数取得列表长度,del 语句从列表删除值,比如:

spam=[1,2,3,4]
del spam[2]
print(spam)##[1, 2, 4]

1.列表的连接和复制:

['x','y','z']*3
[1,2,3]+['a','b','c']

2.enumerate()函数
在for循环中不用range(len(list))获取列表中各表项的整数索引,还可以调用enumerate()函数,返回列表中表项的索引和列表中的表项本身两个值。

s=[1,2,3,4]
for index, item in enumerate(s):
	print(index,item) 

3.list一些常见函数:

函数名 用处
index() 在列表中查找值,返回索引
append() 将参数添加在列表末尾
insert(index,参数) 将参数添加在相应的index处
remove() 从列表中删除值
reverse() 反转列表中的值

4.sort()函数
对列表进行排序,当指定reverse关键字为True时,是逆序排序

spam=[3,5,1,10]
spam.sort()
spam##[1, 3, 5, 10]
spam=[3,5,1,10]
spam.sort(reverse=True)
spam##[10, 5, 3, 1]

不可用spam=spam.sort()记录返回值,因为sort()方法不返回列表。
sort()默认使用“ASCII”字符顺序排序,也就是大写字母排在小写字母之前,但加上key关键字的参数,就可以将小写字母排在大写字母之前。

spam=['a','Z','z','A']
spam.sort(key=str.lower)
spam##['a', 'A', 'Z', 'z']

这里其实是将所有表项都当成小写去排序,但实际上并不会改变她们在列表中的值。
注意:字符串和元组是不可变数据,列表是可变数据。

六.字典

user={
'username':'xiao ming',
'id':2038871
'age':18
}##创建字典
for key,value in user.item()##遍历字典的键和值
for key in user.keys()##变量字典的键
for value in user.value()##遍历字典的值                                                                                                                                                                           

七.类

1.创建一个类的简单实例

class Dog:
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性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.")
my_dog=Dog('bai',3)
my_dog.sit()

类的定义没有圆括号,因为要从空白创建这个类

__init__()##注意此写法是一边两个下划线,不然会报错

相当于c++类和对象中的构造函数,在创建实例的时候,python都会自动运行它,参数self必不可少,而且必须位于其他形参前面。
2.继承
编写类时,并非总是要从空白开始,如果要编写的类时另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新有的类称为子类。子类继承了父类所有属性和方法,同时还可以定义自己的属性和方法。

class Car:
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
class ElectricCar(Car):
    def __init__(self,make,model,year):
        """初始化父类的属性
        再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)
        self.battery=75
    def describe_battery(self):
        print(f"This car has a {self.battery}-KWh battery")
my_car=ElectricCar('teala','model s',2022)
my_car.describe_battery()

super()函数可以调用父类中的方法,父类必须包含在当前文件中,且位于子类前面。
3.重写父类方法
假设car有一个fill_gas()的方法,它对于电动汽车来说毫无意义,因此可以在子类重写,如果有人对电动汽车调用fill_gas()方法,python将忽略Car中的,转而运行子类中的方法,这样使用继承时,可让子类保留从父类那里继承而来的精华,并剔除不需要的糟粕。

你可能感兴趣的:(python学习,python,学习,开发语言)