Python基础(二)

十、生成器

1、创建生成器

方法一:
gen = (x for x in range(5))
print(type(gen))			#<class 'generator'>

调用生成器时需要使用next(generator)方法,每调用一次获取一次生成器的下一个返回值,知道计算到最后一个元素。如果生成器中的元素被调用完,再调用一次则会抛出StopIteration异常。

gen = (x for x in range(5))
print(next(gen))			#0
print(next(gen))			#1
print(next(gen))			#2
方法2:
通过在函数中使用yield创建生成器
def sequence(numb):
    for i in range(numb):
        i = i * 3
        yield i
g = sequence(3)
print(next(g))			#0
print(next(g))			#3

2、send方法

send方法用于传递参数,实现与生成器的交互。send()可以接收一个参数,并将参数传递给接收yield语句返回值的变量。

def sequence(numb):
    for i in range(numb):
        i = i * 3
        temp = yield i
        print(temp)
g = sequence(5)
print(next(g))
print(next(g))
print(g.send("send发送参数"))
print(g.send(None))
close():该方法用于停止生成器;
throw():该方法用于在生成器内部(yield语句内)引发一个异常

十一、迭代器

1、可迭代对象

序列:字符串、列表、元组等
非序列:字典、文件
自定义类:用户自定义的类实现了__iter__()或__getitem__()方法的对象

2、创建迭代器

使用iter()创建迭代器:

语法:
iter(iterable),使用next(iterator)从迭代器iterator中获取一个记录,如果无法获取下一条记录,那么则触发stoptrerator异常
list = [1,2,3,4,5]
it = iter(list)
print(type(it))			#<class 'list_iterator'>
print(next(it))			#1
print(next(it))			#2

十二、函数

1、函数定义

语法:
def 【函数名(参数)】:
	'''【函数说明】'''
	【代码块】
	return 【返回值】

在函数定义中,以return【返回值】结束函数。如果函数中没有return【返回值】,则相当于return None。
函数定义完成,调用函数。直接使用【函数名(参数)】的方法调用,如果没有参数,则参数不用填写。

2、参数

1)、位置参数

位置参数在使用时所有参数都遵循位置一一对应的原则。

def say_hello(name):
    return (name + '您好!')
print(say_hello("AlySam"))			#AlySam您好!

2)、缺省参数

缺省参数是给参数设置缺省值,当调用函数时,该参数可以选择不传递值而使用缺省值,也可以传递值从而不使用缺省值。

语法:
【参数名】=【缺省值】
def say_hello(name,say = 'Hello'):
    return (name + say)
print(say_hello("AlySam"))			#AlySamHello
def say_hello(name,say = 'Hello'):
    return (name + '你好')
print(say_hello("AlySam"))			#AlySam你好

3)、可变参数

如果不知道传入的参数个数,则定义参数时需要将参数设置为可变参数,可变参数需要以元组形式传递。

语法:
*【参数名】
def get_sum(*number):
    sum = 0
    for i in number:
        sum += i
    return sum
print(get_sum(1,3,5,7,9))			#25
print(get_sum(1))					#1

4)、关键字参数

关键字参数以字典形式传递。

语法:
**kw
def tree_info(id,date,**kw):
    return ('id:',id,'date:',date,'ps:',kw)
print(tree_info(1,'2018/06/03'))					#('id:', 1, 'date:', '2018/06/03', 'ps:', {})
print(tree_info(1,'2018/06/03',local="beijing"))	#('id:', 1, 'date:', '2018/06/03', 'ps:', {'local': 'beijing'})

5)、参数组合

在定义函数时可以传递位置参数、缺省参数、可变参数、关键字参数中的一种或者多种参数的组合。

def tree_info(id,date,local = "beijing",*args,**kw):
    return ('id:',id,'date:',date,'local:',local,'args:',args,'ps:',kw)
print(tree_info(1,'2018/06/03'))
print(tree_info(1,'2018/06/03','nanjing'))
print(tree_info(1,'2018/06/03','nanjing','highway','path'))
print(tree_info(1,'2018/06/03','nanjing','highway',kind='pine'))

3、匿名函数

语法:
lambda 参数1,参数2,...,参数n:表达式
1、lambda 只能包含一条语句;
2、参数可选,可以为0;
3、不需要return,直接返回表达式;
4、需要被调用才能执行;
5、表达的生成函数一般都比较简单;
lam = lambda x,y:x*y
print(lam(2,3))

4、参数类型

语法:
【参数】:【数据类型】

5、返回值类型

语法:
def 【函数名(参数)】->【数据类型】

十三、类和对象

类是用来描述具有相同属性和方法的对象的集合,对象是类的实例。

1、创建类

使用class创建类,class后为类名并且以冒号结尾。

语法:
class 【类名】(【父类名】):
	'''【类说明】'''
	【代码块】
【父类名】为所要继承的类,【类说明】一般都是对此类进行说明。
class Animal:
    """这是一个动物类"""
    food = "粮食"
    def __init__(self,name):
        self.name = name
    def eat(self):
        print("%s正在吃%s" % (self.name,Animal.food))

2、创建实例对象

使用类名就可以创建一个类的实例,并且可以通过__init__方法接收参数。

cat = Animal("猫咪")

实例化之后就可以通过(.)来访问对象的属性或者方法。

cat = Animal("猫咪")
cat.eat()
print(cat.food)

实例化之后也可对其属性进行修改。

语法:
添加属性:【实例对象】.【新属性名】=【属性值】
修改属性值:【实例对象】.【属性名】=【新值】
删除属性:del 【实例对象】.【属性名】

3、类的私有化

定义私有变量,在名称前加两个下划线(__)。

class Persion(object):
    def __init__(self):
        self.__name = "persion"
    def __eat(self):
        print("Eating!")
xiaoming = Persion()
xiaoming.__name
Traceback (most recent call last):
  File "E:\Users\PycharmProjects\TimeSheet\AAAA.py", line 288, in <module>
    xiaoming.__name
AttributeError: 'Persion' object has no attribute '__name'

4、类继承

语法:
class 【派生类名】(【继承基类名】):
		【代码块】
【派生类】会继承【继承基类】的所有属性和方法
class Persion(object):
    def __init__(self):
        pass
    def eat(self):
        print("Eating!")
class Student(Persion):
    pass
xiaoming = Student()
xiaoming.eat()

5、类的重写

类的重写是指在父类中已经有了这个属性或者方法,子类想修改其内容,对本身子类的属性或者方法进行重写。在子类中使用与父类中相同的变量或者方法名,就可以重新定义父类中的属性和方法。

class Persion(object):
    def __init__(self):
        self.name = "persion"
    def eat(self):
        print("Eating!")
class Student(Persion):
    def __init__(self):
        #super用于继承父类中的属性
        super(Student,self).__init__()
        print(self.name)
        #name属性重写
        self.name = "student"
        print(self.name)
    #eat方法重写
    def eat(self):
        print("AlySam")
xiaoming = Student()
xiaoming.eat()

十四、模块

1、模块的分类

标准模块:Python基本库,使用时直接用import导入;
第三方模块:需要使用pip安装,再用import导入;
用户自定义模块:用户自己定义的py文件;

2、模块的导入

语法1:import【模块名】as【别名】
语法2:from【模块名】import【指定部分】
语法3:from【模块名】import *
import sys as ay				#直接导入sys模块
import os,time					#导入os、time模块
from selenium import webdriver	#从selenium导入webdriver模块
from sys import *				#模糊导入

十五、作用域

作用域是指变量的有效范围,Python的作用域是静态的,变量被赋值、创建的位置决定了其被访问的范围,即变量作用域由其所在的位置决定。

L(Local):局部作用域
E(Enclosing):嵌套的父级函数局部作用域;
G(Global):全局作用域
B(Built-in):内建作用域

十六、异常机制

异常机制可以使程序在运行过程中顺利执行,即使遇到错误也能很好地处理,提高了程序的健壮性和可用性。

1、try-except

基本语法:
try:
	【代码块】
except Exception as ex:
	【处理异常代码块】	
def func(a,b):
    try:
        return a / b
    except ZeroDivisionError as e:
        return e
print(func(4,2))			#2.0
print(func(2,0))			#division by zero

2、else

结合else使用,else子句会再try子句没有发生任何异常的时候执行,一旦try子句出现异常,else子句将不会执行,else使用需要放在except子句之后。

def func(a,b):
    try:
        print(a / b)
    except:
        print("Error")
    else:
        print("try...except")
func(4,2)
func(4,0)
2.0
try...except
Error

3、finally

finally子句是无论try子句有没有异常都会执行。

def func(a,b):
    try:
        print(a / b)
    except:
        print("Error")
    finally:
        print("try...except")
func(4,2)
func(4,0)
2.0
try...except
Error
try...except

十七、init.py文件

十八、Python实用技巧

1、打印分隔符

使用print中的参数sep进行换行,实现分割线的快速打印。

print('selenium','web','autotest',sep='\n----------\n')
selenium
----------
web
----------
autotest

2、変量変换

a = 1
b = 2
a,b = b,a
print(a,b)

3、列表反转

list = [1,'A',3.25]
reversed_list = list[::-1]
print(reversed_list)

4、链式使用

a = 4
print(4 == a < 6)			#True

5、使用三元操作符进行条件赋值

【表达式为真的返回值】if 【表达式】else【表达式为假的返回值】
def func(y):
    x = -1
    return x if (y > 99) else 1

6、同时迭代两个列表

使用zip函数同时迭代两个列表。

list1 = [1,2,3,4]
list2 = ['A','B','C','D']
for i,j in zip(list1,list2):
    print(str(i) + ':' + j)
1:A
2:B
3:C
4:D

7、从两个相关的序列构建一个字典

list1 = [1,2,3,4]
list2 = ['A','B','C','D']
dict = dict(zip(list1,list2))
print(dict)			#{1: 'A', 2: 'B', 3: 'C', 4: 'D'}

8、初始化列表值

List = [2] * 5
print(List)			#[2, 2, 2, 2, 2]

9、从列表中删除重复项

使用set将列表去重,然后转换成列表。

L = ['A','B','C','D','D','E']
new_L = list(set(L))
print(new_L)			#['A', 'B', 'D', 'E', 'C']

10、enumerate函数

将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出索引和值。

enumerate(sequence,[start=0]),start参数为索引起始位置。
seq = ['A', 'B', 'D', 'E', 'C']
for index,item in enumerate(seq):
    print(index,item)			
0 A
1 B
2 D
3 E
4 C
print(list(enumerate(seq,start=1)))			#[(1, 'A'), (2, 'B'), (3, 'D'), (4, 'E'), (5, 'C')]

11、map函数

接收一个函数function和一个列表,并通过把函数function依次作用在列表的每个元素上,得到一个新的列表并返回。

A = list(map(lambda x,y:x*y,[1,3,7],[5,2,6]))
print(A)			#[5, 6, 42]

12、any和all

any()函数用于判断一个可迭代函数的元素是否全为False。如果是,返回False;否则返回True。False元素中有0、空字符串(‘’)、空列表([])、False。

print(any([0,1]))
print(any(['',0,False]))

all()函数

print(all([3,1]))
print(all(['',0,False]))

13、strip去除空格

str.strip():去除字符串两边的空格
str.lstrip():去除字符串左边的空格
str.rstrip():去除字符串右边的空格
str = "   Hello World "
print(str.strip())			#Hello World
print(str.lstrip())			#Hello World
print(str.rstrip())			#   Hello World

14、获取当前文件的绝对路径

import os
realpath = os.path.split(os.path.realpath(__file__))[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值