欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Python 3》--三引号、math模块、cmath模块、日期和时间、转义字符、字符串运算符、字符串格式化、函数、全局变量和局部变量、匿名函数(lambda))

程序员文章站 2023-12-21 20:16:52
...

■Python三引号(triple quotes)

python中三引号可以将复杂的字符串进行复制:

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符

三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
var = '''hello 
    world'''
print var


运行结果:
hello 
    world

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,
自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,
特殊字符串转义将会非常的繁琐。

 errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (  
login VARCHAR(8), 
uid INTEGER,
prid INTEGER)
''')


■Python math 模块、cmath 模块

Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。

Python math 模块提供了许多对浮点数的数学运算函数

Python cmath 模块包含了一些用于复数运算的函数

cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。

要使用 math 或 cmath 函数必须先导入:

import math
import cmath 

#ceil(x)         返回数字的上入整数,如math.ceil(1.5) 返回 2
import math
print math.ceil(1.5)

#floor(x)       返回数字的下舍整数,如math.floor(1.5)返回 1
print math.floor(1.5)  

import math
print math.pi

 

■Python 日期和时间

Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能

Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。

时间间隔是以秒为单位的浮点小数。

每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:

■时间类

import time
print time.time()
print time.localtime()
print time.localtime()[0]
print time.localtime()[1]
print time.localtime()[2]

运行结果:
1534329188.39
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=15, tm_hour=18, tm_min=33, tm_sec=8, tm_wday=2, tm_yday=227, tm_isdst=0)
2018
8
15


python中时间日期格式化符号:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

例:格式化时间

import time

# 格式化成2016-03-20 11:45:39形式
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

输出结果:
2018-09-09 15:20:16

■日期类

import calendar
month = calendar.month(2018,8)
print month


运行结果:
    August 2018
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
例:字符<-->日期 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import datetime
#时间转字符串
str=time.strftime("%Y-%m-%d", time.localtime())
print str

#字符串转时间,返回类型是元组
t = time.strptime("2019 - 03 - 19", "%Y - %m - %d")

#获得的是时间元组
print t

#获得元组的年 月 日
print t[0]
print t[1]
y,m,d = t[0:3]

#转datetime类型
#ymd=datetime.datetime(2018,11,12)

ymd=datetime.datetime(y,m,d)
print ymd


■Python转义字符

转义字符         描述
\(在行尾时)    续行符
\\                    反斜杠符号
\'                    单引号
\"                   双引号
\a                  响铃
\b                  退格(Backspace)
\e                  转义
\000              空
\n                  换行
\v                  纵向制表符
\t                  横向制表符
\r                  回车
\f                  换页
\oyy             八进制数,yy代表的字符,例如:\o12代表换行
\xyy             十六进制数,yy代表的字符,例如:\x0a代表换行
\other          其它的字符以普通格式输出


■Python字符串运算符

下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":

操作符          描述                                              实例
+          字符串连接                                          >>>a + b          输出:'HelloPython'

*          重复输出字符串                                   >>>a * 2          输出:'HelloHello'

[]          通过索引获取字符串中字符                >>>a[1]           输出:'e'

[ : ]      截取字符串中的一部分                        >>>a[1:4]         输出:'ell'

in          成员运算符 - 如果字符串中包含给定的字符返回 True      >>>"H" in a       输出:True

not in    成员运算符 - 如果字符串中不包含给定的字符返回 True  >>>"M" not in a   输出:True

r/R        原始字符串:所有的字符串都是直接按照                        >>> print r'\n'    \n
           字面的意思来使用,没有转义特殊或不能打印的字符。    >>> print R'\n'    \n
           原始字符串除在字符串的第一个引号前加上字母"r"
         (可以大小写)以外,与普通字符串有着几乎完全相同的语法    

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
a = "Hello"
b = "Python"
 
print "a + b 输出结果:", a + b 
print "a * 2 输出结果:", a * 2 
print "a[1] 输出结果:", a[1] 
print "a[1:4] 输出结果:", a[1:4] 
 
if( "H" in a) :
    print "H 在变量 a 中" 
else :
    print "H 不在变量 a 中" 
 
if( "M" not in a) :
    print "M 不在变量 a 中" 
else :
    print "M 在变量 a 中"
 
print r'\n'
print R'\n'


以上程序执行结果为:

a + b 输出结果: HelloPython
a * 2 输出结果: HelloHello
a[1] 输出结果: e
a[1:4] 输出结果: ell
H 在变量 a 中
M 不在变量 a 中
\n
\n

#将两个变量值交换
a = 100
b = 200

print '分别输出两个变量的值__________'
print a
print b


# print '传统方法实现两数交换__________'
# c=a
# a=b
# b=c
# print a
# print b


# print '元组方法实现两数交换__________'
# a,b = (b,a)
# print a
# print b

print '省略元组小括号两数交换__________'
a,b = b,a
print a
print b

■Python 字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,
但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

■python字符串格式化符号:

    符   号    描述
      %c     格式化字符及其ASCII码
      %s     格式化字符串
      %d     格式化整数
      %u     格式化无符号整型
      %o     格式化无符号八进制数
      %x     格式化无符号十六进制数
      %X     格式化无符号十六进制数(大写)
      %f      格式化浮点数字,可指定小数点后的精度
      %e     用科学计数法格式化浮点数
      %E     作用同%e,用科学计数法格式化浮点数
      %g     %f和%e的简写
      %G     %f 和 %E 的简写
      %p     用十六进制数格式化变量的地址
      
格式化操作符辅助指令:

符号    功能
*         定义宽度或者小数点精度
-         用做左对齐
+        在正数前面显示加号( + )
<sp>  在正数前面显示空格
#        在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
0        显示的数字前面填充'0'而不是默认的空格
%       '%%'输出一个单一的'%'
(var)   映射变量(字典参数)
m.n.   m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)


实例1:

#!/usr/bin/python

print "My name is %s and weight is %d kg!" % ('Zara', 21) 

以上实例输出结果:
My name is Zara and weight is 21 kg!

实例2:

name = 'xiaoming'
position = '讲师'
address = '北京市昌平区建材城西路金燕龙办公楼1层'

print('--------------------------------------------------')
print("姓名:%s"%name)
print("职位:%s"%position)
print("公司地址:%s"%address)


实例3:

userName = raw_input('请输入用户名:')
print("用户名为:%s"%userName)

password = raw_input('请输入密码:')
print("密码为:%s"%password)


实例4:
字符串格式化操作
<1>格式化操作的目的
比如有以下代码:

    pirnt("我今年10岁")
    pirnt("我今年11岁")
    pirnt("我今年12岁")
    ...
想一想:
在输出年龄的时候,用了多次"我今年xx岁",能否简化一下程序呢???怎样用一个print来循环完成呢?
答:
字符串格式化
<2>什么是格式化
看如下代码:

    age = 10
    print("我今年%d岁"%age)

    age += 1
    print("我今年%d岁"%age)

    age += 1
    print("我今年%d岁"%age)

    ...
在程序中,看到了%这样的操作符,这就是Python中格式化时用运算符
修改以上的程序,如下:

 age = 10
    while i<=13:
        print("我今年%d岁"%age)
        age += 1


实例5:%d     格式化整数

i = 0
while i<5:
    print "当前是第%d次执行循环"%(i+1)
    print "i=%d"%i
    i+=1


Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
◆format()
这一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次
替换字符串内的占位符{0}、{1}……,
不过这种方式写起来比%要麻烦得多:

 
实例6::九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print'{}x{}={}\t'.format(i, j, i * j),
    print


1x1=1    
2x1=2    2x2=4    
3x1=3    3x2=6    3x3=9    
4x1=4    4x2=8    4x3=12    4x4=16    
5x1=5    5x2=10    5x3=15    5x4=20    5x5=25    
6x1=6    6x2=12    6x3=18    6x4=24    6x5=30    6x6=36    
7x1=7    7x2=14    7x3=21    7x4=28    7x5=35    7x6=42    7x7=49    
8x1=8    8x2=16    8x3=24    8x4=32    8x5=40    8x6=48    8x7=56    8x8=64    
9x1=9    9x2=18    9x3=27    9x4=36    9x5=45    9x6=54    9x7=63    9x8=72    9x9=81    

■ Python 函数

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,
所以把具有独立功能的代码块组织为一个小模块,这就是函数
 
你可以定义一个由自己想要功能的函数,以下是简单的规则:

1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]实例 :以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
 

# 自定义函数
def printme(str):
    print str

 
# 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");


#可写函数说明
def printme( str ):
   #"打印任何传入的字符串"
   print str;
   return;
 
#调用printme函数
printme( str = "My string");

#定义一个函数
def hello():
    '''打印函数信息'''
    print ("hello")

def hello2(message):
    print("hello"+message)
#调用函数
hello()
hello2("张三")

#有返回值的方法调用:

def hello2(n1,n2):
    sum = n1 + n2
    return sum

#调用函数  
result = hello2(1,3)
print result


#函数调用 例子:

#打印一条横线
def printOneLine():
    print("-"*30)
# 打印多条横线
def printNumLine(num):
    i=0

    # 因为printOneLine函数已经完成了打印横线的功能,
    # 只需要多次调用此函数即可
    while i<num:
        printOneLine()
        i+=1
printOneLine()
#printNumLine(3)

■ 嵌套函数调用, 断点调试
# 求3个数的和
def sum3Number(a,b,c):
    return a+b+c # return 的后面可以是数值,也可是一个表达式

# 完成对3个数求平均值
def average3Number(a,b,c):

    # 因为sum3Number函数已经完成了3个数的就和,所以只需调用即可
    # 即把接收到的3个数,当做实参传递即可
    sumResult = sum3Number(a,b,c)
    aveResult = sumResult/3.0
    return aveResult

# 调用函数,完成对3个数求平均值
result = average3Number(11,2,55)
print("average is %d"%result)

■参数传递
在 python 中,类型属于对象,变量是没有类型的:

a=[1,2,3]
 
a="Hello"
以上代码中,[1,2,3] 是 List 类型,
"Hello" 是 String 类型,
而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),
可以是 List 类型对象,也可以指向 String 类型对象。

 
在python 中,string, tuples, numbers 是不可更改的对象,
                     而 list,dict 等则是可以修改的对象。

不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,
再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,
本身la没有动,只是其内部的一部分值被修改了。


python 中一切都是对象,严格意义我们不能说值传递还是引用传递,
我们应该说传不可变对象和传可变对象。
■python 传不可变对象实例:

def ChangeInt(a):
    a = 10
 
b = 2
ChangeInt(b)
print b # 结果是 2

解析:
实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,
按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,
在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它,原a=2,因为不在指向而丢弃

■传可变对象实例

def changeme( mylist ):
   #"修改传入的列表"
   mylist.append([1,2,3,4]);
   print "函数内取值: ", mylist
   return
 
# 调用changeme函数
mylist = [10,20,30];
changeme( mylist );
print "函数外取值: ", mylist

解析:
实例中传入函数的和在末尾添加新内容的对象用的是同一个引用,故输出结果如下:
函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]


■下例能将关键字参数顺序不重要,展示得更清楚

def printinfo( name, age ):
   "打印任何传入的字符串"
   print "Name: ", name;
   print "Age ", age;
   return;
 
#调用printinfo函数
printinfo( age=50, name="miki" );

■缺省参数
  调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

def printinfo(name, age=35):
    "打印任何传入的字符串"
    print "Name: ", name;
    print "Age ", age;
    return;


# 调用printinfo函数
printinfo(age=50, name="miki"); #如果age没有被传入
printinfo(name="miki1");        #打印默认的age


■全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2; # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total;
 
#调用sum函数
sum( 10, 20 );
print "函数外是全局变量 : ", total


以上实例输出结果:

函数内是局部变量 :  30
函数外是全局变量 :  0
■局部变量不能给全局变量赋值

var_1 = 5

def fun():
    var_1=10
    print "局部变量",var_1
fun()
print "全局变量", var_1


■如果在函数中修改全局变量,那么就需要使用global进行声明
global关键字,告诉python解释器这是一个全局变量

var_1 = 5

def fun():
    global var_1
    var_1=10
    print "局部变量",var_1
fun()
print "全局变量", var_1


全局变量定义位置:
def fun():
    global var_1
    var_1=10
    print "局部变量",var_1

#var_1 = 5  在调用函数之前定义
fun()
var_1 = 5    #在调用函数之后定义

print "全局变量", var_1

■函数传列表:

def display(list):
    for i in list:
        print i
list1 = [1,2,3]

display(list1)

运行结果:
1
2
3
■列表改变:

arrays =[3,5]
def swap(args):
    arrays[0],arrays[1]=arrays[1],arrays[0]
print(arrays)
swap(arrays)
print(arrays)


■匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
    lambda [arg1 [,arg2,.....argn]]:expression
实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
sum = lambda arg1, arg2: arg1 + arg2

#调用sum函数
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

以上实例输出结果:
    Value of total :  30
    Value of total :  40

#lambda并不是python独有的,它相当于不去调用方法,而是一次性执行表达式
# lambda替换调用函数 

result = lambda  n1,n2:n1+n2
print result(2,3)

Lambda函数能接收任何数量的参数但只能返回一个表达式的值
匿名函数不能直接调用print,因为lambda需要一个表达式

#!/usr/bin/python
# -*- coding: UTF-8 -*-r
def test(a,b,fun):
    result=fun(a,b)
    return result
ret=test(1,5,lambda x,y:x+y)
print ret

 

上一篇:

下一篇: