最近实践编程,那么我来说说python语法总结

1、将列表、字符串、元组、字典组合成一个新的字符串:join()函数

语法: 'sep'.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串

2、拆分字符串:split()函数

split():通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

语法:str.split(str="",num=string.count(str))[n])

参数说明:
str: 表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
[n]: 表示选取第n个分片
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略

如:

b=["1","0","1","0","1","0"]
b="".join(b).split("0") #先将列表中的元素组成一个字符串,然后split()将b中的0去掉。返回["1","1","1"]

3、对序列中的元素左同意操作:

如:

a=(1,0,3,0,5)
b=[str(i)for i in a]
print (b)

输出值:['1', '0', '3', '0', '5']

4、对路径进行组合:os.path.join()函数:

语法: os.path.join(path1[,path2[,......]])

返回值:将多个路径组合后返回

import os
    path=os.path.join('hello','goodboy','doiido')

    返回值为
    'hello\goodboy\doiido'   #windows platform auto add \ between each string
    'hello/goodboy/doiido'      #linux platform auto add / between each string

5、pycharm中无法加载存在init.py的文件夹时,可以在pycharm中将此文件夹添加到源文件中,也可以在程序开始添加:

import sys
sys.path.append('C:/Users/dsj/Desktop/open-dobot-1.3.0/application/python/dobot'))

这样就不会出现找不到模块的情况了```

6、python string 类型 bytes类型 bytearray类型转换

1个字节=8位二进制位 1个字节=2位16进制位 1位进十六制位=4位二进制位。所以\xff为一个字节长度,\xf为占二进制的4个位

UTF-8编码方式中,英文字母用英文字母字节表示,一个汉字用三个十六进制字节表示

https://www.cnblogs.com/fieldtianye/p/8276552.html

https://www.cnblogs.com/gundan/p/8047315.html

https://blog.csdn.net/baidu_19473529/article/details/80042582

7、输出:print()与sys,stdout.write()

sys.stdout.write("hello"+'\n')
print("hello")

#两者在输出形式上是等价的,print()输出带回车,sys.stdout.write()输出没有回车。

8、读取数组中的名与内容:

list={'时间':3,"大小":5}
for file,data in list.items():
    print(file,data)

时间 3
大小 5

9、Python中的init()和call()函数

转自:https://blog.csdn.net/yaokai_assultmaster/article/details/70256621

在Python的class中有一些函数往往具有特殊的意义。init()和call()就是class很有用的两类特殊的函数。

__init__()

在Python中,init()函数的意义等同于类的构造器(同理,del()等同于类的析构函数)。因此,init()方法的作用是创建一个类的实例。

__call__()

Python中的函数是一级对象。这意味着Python中的函数的引用可以作为输入传递到其他的函数/方法中,并在其中被执行。
而Python中类的实例(对象)可以被当做函数对待。也就是说,我们可以将它们作为输入传递到其他的函数/方法中并调用他们,正如我们调用一个正常的函数那样。而类中call()函数的意义正在于此。为了将一个类实例当做函数调用,我们需要在类中实现call()方法。也就是我们要在类中实现如下方法:def call(self, *args)。这个方法接受一定数量的变量作为输入。
假设x是X类的一个实例。那么调用x.call(1,2)等同于调用x(1,2)。这个实例本身在这里相当于一个函数。

总结

那么,init()和call()的区别如下:

  1. init()的作用是初始化某个类的一个实例。
  2. call()的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(call()不影响一个实例的构造和析构)。但是call()可以用来改变实例的内部成员的值。

        class X(object):
        def __init__(self, a, b, range):
            self.a = a
            self.b = b
            self.range = range
        def __call__(self, a, b):
            self.a = a
            self.b = b
            print('__call__ with ({}, {})'.format(self.a, self.b))
        def __del__(self, a, b, range):
            del self.a
            del self.b
            del self.range
    
    >>> xInstance = X(1, 2, 3)
    >>> xInstance(1,2)
    __call__ with (1, 2)

10、*self._args, **kwargs

```*self._args 表示接受元组类参数;

**kwargs 表示接受字典类参数;

def foo(*args, **kwargs):
print 'args = ', args
print 'kwargs = ', kwargs
print '---------------------------------------'
if name == 'main':
foo(1,2,3,4)
foo(a=1,b=2,c=3)
foo(1,2,3,4, a=1,b=2,c=3)
foo('a', 1, None, a=1, b='2', c=3)

输出结果如下:

args =  (1, 2, 3, 4) 
kwargs =  {} 
--------------------------------------- 
args =  () 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
--------------------------------------- 
args =  (1, 2, 3, 4) 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
--------------------------------------- 
args =  ('a', 1, None) 
kwargs =  {'a': 1, 'c': 3, 'b': '2'} 
---------------------------------------

可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

猜你喜欢

转载自blog.51cto.com/13962326/2176795