Python高级语法

最近重新看了网上的python教程,补充学习了一些之前用的较少的用法

 

字典

注意字典中 key 是乱序的,也就是说和插入 的顺序是不一致的。如果想要使用顺序一致的字典,请使用 collections 模块 中的 OrderedDict 对象

 

迭代器

Python 中的 for 句法实际上实现了设计模式中的迭代器模式 ,所以我们自己也可以按照迭代器的要求自己生成迭代器对象,以便在 for 语句中使用。 只要类中实现了 __iter__ 和 next 函数,那么对象就可以在 for 语句中使用。 现在创建 Fibonacci 迭代器对象

# define a Fib class
class Fib(object):
    def __init__(self, max):
        self.max = max
        self.n, self.a, self.b = 0, 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            r = self.b
            self.a, self.b = self.b, self.a + self.b
            self.n = self.n + 1
            return r
        raise StopIteration()

# using Fib object
for i in Fib(5):
    print(i)


生成器

除了使用迭代器以外,Python 使用 yield 关键字也能实现类似迭代的效果,yield 语句每次 执行时,立即返回结果给上层调用者,而当前的状态仍然保留,以便迭代器下一次循环调用。这样做的 好处是在于节约硬件资源,在需要的时候才会执行,并且每次只执行一次

def fib(max):
    a, b = 0, 1
    while max:
        r = b
        a, b = b, a+b
        max -= 1
        yield r

# using generator
for i in fib(5):
    print(i)

 

对字符串的判断

str为字符串

  • str.isalnum() 所有字符都是数字或者字母
  • str.isalpha() 所有字符都是字母
  • str.isdigit() 所有字符都是数字
  • str.islower() 所有字符都是小写
  • str.isupper() 所有字符都是大写
  • str.istitle() 所有单词都是首字母大写

 

关于python的指针

python没有指针,但它也可以传引用

 

浅拷贝和深拷贝

浅拷贝时,python只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已

深拷贝时,deepcopy对外围和内部元素都进行了拷贝对象本身,而不是对象的引用

import copy
a = [1,2,3]
print(id(a))

b = [1,2,3] # or b = a
print(id(b))

c = copy.copy(a)
print(id(c))


d = copy.deepcopy(a)
print(id(d))

 

其他代码如下

#平方运算
a = 3**2
print(a)

#range的间隔跳跃以及不换行输出(自定义结尾)
for i in range(0,10,2):
    print(i,end=' ')

a = input("\ngive me an interger: ")

# 判断输入 通过elif来多重判断
if (a.isdigit()):
    a = int(a)
    if (a > 0):
        print(">0")
    elif (a < 0):
        print("<0")
    else:
        print("0")
else:
    print("no number!")


# 在函数里面使用全局变量
A = 10
def change():
    global A
    A = A-1

change()
print(A)


# 读写文件
my_file = open('my_file.txt','w') #默认使用相对路径,w会覆盖之前的所有数据
text = "I am here"
my_file.write(text)
my_file.close()

my_file = open('my_file.txt','a') # a -> append
my_file.write("\nthis is my second line")
my_file.close()

my_file = open('my_file.txt','r') #r->read
content = my_file.read()
print(content)

# 逐行读取
for line in my_file.readlines():
    print(line,end='')


# tuple list 之间的转换
alist = [1,2,3,4,99]
atuple = ()
atuple = tuple(alist)
print(atuple)

alist2 = []
alist2 = list(atuple)
print(alist2)

# 以下的remove和pop是等价的
alist.remove(99)
# alist.pop(4)
print(alist)

alist.sort(reverse=True)
print(alist)

import time
print("time now is "+str(time.localtime().tm_hour)+":"+str(time.localtime().tm_min))  #这样就可以print 当地时间了


try:
    file=open('eeee.txt','r+')
except Exception as e:
    print(e)
    response = input('do you want to create a new file:')
    if response=='y':
        file=open('eeee.txt','w')
    else:
        pass
else:
    file.write('ssss')
    file.close()



a=[1,2,3]
b=[4,5,6]
ab=zip(a,b)
print(list(ab))  #需要加list来可视化这个功能
for i,j in zip(a,b):
     print(i/2,j*2)

fun= lambda x,y:x+y
x=int(input('x='))    #这里要定义int整数,否则会默认为字符串
y=int(input('y='))
print(fun(x,y))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值