首页 > 编程语言 >Python 函数 类 语法糖

Python 函数 类 语法糖

时间:2023-08-01 15:31:53浏览次数:31  
标签:__ 函数 Python self 语法 other print def name

Python 语法糖

\,换行连接


Python

s = ''
s += 'a' +
     'b' +
     'c'
n = 1 + 2 +
3
# 6


while,for 循环外的 else

如果 while 循环正常结束(没有break退出)就会执行else。


Python


num = [ 1 , 2 , 3 , 4 ]
mark = 0
while mark < len ( num ) :
     n = num [ mark ]
     if n % 2 == 0 :
         print ( n )
         # break
     mark += 1
else : print ( "done" )


zip() 并行迭代



a = [ 1 , 2 , 3 ]
b = [ 'one' , 'two' , 'three' ]
list ( zip ( a , b ) )
# [(1, 'one'), (2, 'two'), (3, 'three')]

列表推导式



x = [ num for num in range ( 6 ) ]
# [0, 1, 2, 3, 4, 5]
y = [ num for num in range ( 6 ) if num % 2 == 0 ]
# [0, 2, 4]
 
# 多层嵌套
rows = range ( 1 , 4 )
cols = range ( 1 , 3 )
for i in rows :
     for j in cols :
         print ( i , j )
# 同
rows = range ( 1 , 4 )
cols = range ( 1 , 3 )
x = [ ( i , j ) for i in rows for j in cols ]


字典推导式

{ key_exp : value_exp fro expression in iterable }

#查询每个字母出现的次数。
strs = 'Hello World'
s = { k : strs . count ( k ) for k in set ( strs ) }


集合推导式

{expression for expression in iterable }


元组没有推导式

本以为元组推导式是列表推导式改成括号,后来发现那个 生成器推导式。


生成器推导式


>>> num = ( x for x in range ( 5 ) )
>>> num
. . . : < generator object < genexpr > at 0x7f50926758e0 >


函数

函数关键字参数,默认参数值


def do ( a = 0 , b , c )
     return ( a , b , c )
 
do ( a = 1 , b = 3 , c = 2 )

函数默认参数值在函数定义时已经计算出来,而不是在程序运行时。

列表字典等可变数据类型不可以作为默认参数值。



def buygy ( arg , result = [ ] ) :
     result . append ( arg )
     print ( result )
changed:



def nobuygy ( arg , result = None ) :
     if result == None :
         result = [ ]
     result . append ( arg )
     print ( result )
# or
def nobuygy2 ( arg ) :
     result = [ ]
     result . append ( arg )
     print ( result )


*args 收集位置参数



def do ( * args ) :
     print ( args )
do ( 1 , 2 , 3 )
( 1 , 2 , 3 , 'd' )


**kwargs 收集关键字参数


def do ( * * kwargs ) :
   print ( kwargs )
do ( a = 1 , b = 2 , c = 'la' )
# {'c': 'la', 'a': 1, 'b': 2}


lamba 匿名函数


a = lambda x : x * x
a ( 4 )
# 16

生成器

生成器是用来创建Python序列的一个对象。可以用它迭代序列而不需要在内存中创建和存储整个序列。

通常,生成器是为迭代器产生数据的。


生成器函数函数和普通函数类似,返回值使用 yield 而不是 return 。



def my_range ( first = 0 , last = 10 , step = 1 ) :
     number = first
     while number < last :
         yield number
         number += step
 
>>> my_range ( )
. . . < generator object my_range at 0x7f02ea0a2bf8 >


装饰器

有时需要在不改变源代码的情况下修改已经存在的函数。

装饰器实质上是一个函数,它把函数作为参数输入到另一个函数。

举个栗子:



# 一个装饰器
def document_it ( func ) :
     def new_function ( * args , * * kwargs ) :
         print ( "Runing function: " , func . __name__ )
         print ( "Positional arguments: " , args )
         print ( "Keyword arguments: " , kwargs )
         result = func ( * args , * * kwargs )
         print ( "Result: " , result )
         return result
     return new_function
 
# 人工赋值
def add_ints ( a , b ) :
     return a + b
 
cooler_add_ints = document_it ( add_ints ) #人工对装饰器赋值
cooler_add_ints ( 3 , 5 )
 
# 函数器前加装饰器名字
@ document_it
def add_ints ( a , b ) :
     return a + b

可以使用多个装饰器,多个装饰由内向外向外顺序执行。


命名空间和作用域


a = 1234
def test ( ) :
     print ( "a = " , a ) # True
####
a = 1234
def test ( ) :
     a = a - 1      #False
     print ( "a = " , a )

可以使用全局变量 global a 。


a = 1234
def test ( ) :
     global a
     a = a - 1      #True
     print ( "a = " , a )
Python 提供了两个获取命名空间内容的函数
local()
global()

_ 和 __

Python 保留用法。

举个栗子:



def amazing ( ) :
     '''This is the amazing.
    Hello
    world'''
     print ( "The function named: " , amazing . __name__ )
     print ( "The function docstring is: n" , amazing . __doc__ )


异常处理,try…except

只有错误发生时才执行的代码。

举个栗子:


>>> l = [ 1 , 2 , 3 ]
>>> index = 5
>>> l [ index ]
Traceback ( most recent call last ) :
   File "" , line 1 , in
IndexError : list index out of range

再试下:



>>> l = [ 1 , 2 , 3 ]
>>> index = 5
>>> try :
. . .      l [ index ]
. . . except :
. . .      print ( "Error: need a position between 0 and" , len ( l ) - 1 , ", But got" , index )
. . .
Error : need a position between 0 and 2 , But got 5

没有自定异常类型使用任何错误。


获取异常对象,except exceptiontype as name



short_list = [ 1 , 2 , 3 ]
while 1 :
     value = input ( "Position [q to quit]? " )
     if value == 'q' :
         break
     try :
         position = int ( value )
         print ( short_list [ position ] )
     except IndexError as err :
         print ( "Bad index: " , position )
     except Exception as other :
         print ( "Something else broke: " , other )


自定义异常

异常是一个类。类 Exception 的子类。



class UppercaseException ( Exception ) :
     pass
 
words = [ 'a' , 'b' , 'c' , 'AA' ]
for i in words :
     if i . isupper ( ) :
         raise UppercaseException ( i )
# error
Traceback ( most recent call last ) :
   File "" , line 3 , in
__main__ . UppercaseException : AA


命令行参数

命令行参数

python文件:


Python

1

2

import sys

print ( sys . argv )


PPrint()友好输出

与print()用法相同,输出结果像是列表字典时会不同。


子类super()调用父类方法

举个栗子:



class Person ( ) :
     def __init__ ( self , name ) :
         self . name = name
 
class email ( Person ) :
     def __init__ ( self , name , email ) :
         super ( ) . __init__ ( name )
         self . email = email
 
a = email ( 'me' , '[email protected]' )
>>> a . name
. . . 'me'
>>> a . email
. . . '[email protected]'


self.__name 保护私有特性


class Person ( ) :
     def __init__ ( self , name ) :
         self . __name = name
a = Person ( 'me' )
>>> a . name
. . . AttributeError : 'Person' object has no attribute '__name'
 
# 小技巧
a . _Person__name


实例方法( instance method )

实例方法,以self作为第一个参数,当它被调用时,Python会把调用该方法的的对象作为self参数传入。



class A ( ) :
     count = 2
     def __init__ ( self ) : # 这就是一个实例方法
         A . count += 1


类方法 @classmethod


class A ( ) :
     count = 2
     def __init__ ( self ) :
         A . count += 1
     @ classmethod
     def hello ( h ) :
         print ( "hello" , h . count )

注意,使用h.count(类特征),而不是self.count(对象特征)。


静态方法 @staticmethod



class A ( ) :
     @ staticmethod
     def hello ( ) :
         print ( "hello, staticmethod" )
>>> A . hello ( )

创建即用,优雅不失风格。


特殊方法(sqecial method)

一个普通方法:


class word ( ) :
     def __init__ ( self , text ) :
         self . text = text
     def equals ( self , word2 ) : #注意
         return self . text . lower ( ) == word2 . text . lower ( )
a1 = word ( 'aa' )
a2 = word ( 'AA' )
a3 = word ( '33' )
a1 . equals ( a2 )
# True

使用特殊方法:



class word ( ) :
     def __init__ ( self , text ) :
         self . text = text
     def __eq__ ( self , word2 ) : #注意,使用__eq__
         return self . text . lower ( ) == word2 . text . lower ( )
a1 = word ( 'aa' )
a2 = word ( 'AA' )
a3 = word ( '33' )
a1 == a2
# True

其他还有:



*方法名 *                          *使用 *
__eq__ ( self , other )              self == other
__ne__ ( self , other )              self != other
__lt__ ( self , other )              self    other
__le__ ( self , other )              self = other
 
__add__ ( self , other )          self + other
__sub__ ( self , other )          self - other
__mul__ ( self , other )          self * other
__floordiv__ ( self , other )      self / / other
__truediv__ ( self , other )          self / other
__mod__ ( self , other )          self % other
__pow__ ( self , other )          self * * other
 
__str__ ( self )                  str ( self )
__repr__ ( self )                  repr ( self )
__len__ ( self )                  len ( self )


文本字符串


'%-10d | %-10f | %10s | %10x' % ( 1 , 1.2 , 'ccc' , 0xf )
#
'1          | 1.200000   |        ccc |         33'


{} 和 .format


'{} {} {}' . format ( 11 , 22 , 33 )
# 11 22 33
'{2:2d} {0:-10d} {1:10d}' . format ( 11 , 22 , 33 )
# :后面是格式标识符
# 33 11 22
 
'{a} {b} {c}' . format ( a = 11 , b = 22 , c = 33 )


标签:__,函数,Python,self,语法,other,print,def,name
From: https://blog.51cto.com/u_6186189/6922966

相关文章

  • 在python中,title()可以用在列表中吗?
    1、python根据一个随机url链接获取该链接中的title?2、在python中,title()可以用在列表中吗?3、Python绘图如何显示中文标题4、在python中set_title的意思python根据一个随机url链接获取该链接中的title?1、这种方法为从urlparse模块中通过urlparse方法提取url通过hostnam......
  • Python-6-Python面向对象
    6-1面向过程与面向对象1.面向过程面向过程,核心在过程二字,面向过程设计思维,就好比精心设计一条流水线,考虑周全,相应时候处理相应问题。优点:将复杂问题流程化,进而简单化。缺点:扩展性差。若更改需求,可能整个代码都需要重写,牵一发而动全身。若解决不需要经常迭代更新的程序时,面向过......
  • 关于安装python包执行setup.py文件报错类似提示line 155 warnings.warn(f'Cannot copy
    首先可以确定世python语法问题,一般来说python3.6以后字符串使用f是没有问题的,后来发现问题所在,原来我安装好python以后,没有将python命令软连接到python3,导致python命令其实一直是使用的python2,所以才会有这样的问题。所以,当python3安装好以后,一定要重新指向软连接,还有pip3,也要指向......
  • (Python编程)基本的内嵌技术
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。23.3.BasicEmbeddingTechniques23.3.基本的内嵌技术Asyoucanprobablytellfromtheprecedingoverview,thereismuchfl......
  • Boost.Python构建与测试HOWTO
    Boost.Python构建与测试HOWTOboost文档翻译(http://boost.everydo.com/)截止到2008.1.14:boost文档翻译计划共有成员10名:xuwaters、金庆、yinyuanchao、felurkinda、simonyang、fatalerror99、hzjboost、alai04、farproc、jasson.wang。目前已完成:an......
  • 用Boost.Python构建混合系统
    BuildingHybridSystemswithBoost.Python用Boost.Python构建混合系统Author:DavidAbrahamsContact:Organization:BoostConsultingDate:2003-03-19Author:RalfW.Grosse-KunstleveCopyright:CopyrightDavidAbrahamsandRalfW.Grosse-Kunstleve2003.Allrightsreserve......
  • 记录每一天,lambda 与 函数式 接口。
    lambda与函数式接口01偶然遇到LocalDate的方法,真是太惊喜了,以前每次处理起时间,日期都要很头疼。当时真是烦人啊。学习过LocalDate后日期,与时间的处理感觉手到擒来啊,爱你LocalDate。学习过程中发现他是jdk1.8的新特性。您猜我又遇到了什么lambda表达式与函数......
  • 无涯教程-Lua - 函数声明
    函数是一起执行任务的一组语句,您可以将代码分成单独的函数。Lua语言提供了程序可以调用的许多内置方法。如方法print()打印在控制台中作为输入传递的参数。定义函数Lua编程语言中方法定义的一般形式如下-optional_function_scopefunctionfunction_name(argument1,argume......
  • (Python编程)目录工具
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。   4.3.DirectoryTools 4.3.目录工具Oneofthemorecommontasksintheshellutilitiesdomainisapplyinganoperationtoasetoffilesin......
  • 如何找到 Python site-packages 目录的位置?
    如何找到我的目录的位置site-packages? 答:有两种类型的站点包目录:全局目录和每个用户目录。sys.path运行时会列出全局站点包(“dist-packages”)目录:python-msite要获得更简洁的列表,请getsitepackages从Python代码中的site模块运行:python-c'importsite;print(......