博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 函数之day3
阅读量:5922 次
发布时间:2019-06-19

本文共 10070 字,大约阅读时间需要 33 分钟。

一 函数的语法及特性

什么是函数?

定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可。

特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

定义函数

>>> def hello():               #def 关键字 hello 函数名    print('Hello,world!') >>> hello()          #通过名字调用函数 Hello,world!>>> def product(x,y):   #传入两个参数,返回两个数的乘积    result = x*y    return(result)>>> product(5,7)        #调用函数35

程序断点运行(可以调试的时候用到)

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2016/10/16 20:06 4 # @Author  : Derby 5 # @File    : SendMail.py 6 import smtplib 7 from email.mime.text import  MIMEText 8 from email.utils import formataddr 9 10 def sendMail():11     try:12         msg = MIMEText('邮件内容', 'plain', 'utf-8')13         msg['From'] = formataddr(["derby", 'dbb-2008@163.com'])14         msg['To'] = formataddr(["dbb", '499245549@qq.com'])15         msg['Subject'] = "主题"16 17         server = smtplib.SMTP("smtp.163.com", 25)18         server.login("dbb-2008@163.com", "邮箱密码")19         server.sendmail('dbb-2008@163.com', ['499245549@qq.com', ], msg.as_string())20         server.quit()21     except:22         return "发送失败"23     else:24         return '发送成功'25 26 result=sendMail()27 print(result)
Python发邮件

 

函数返回之return

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None 
1 def f1(): 2     print ('deng') 3     return '111'     #在函数中,一旦执行return,函数立即终止 4     print ('derby') 5  6 r=f1() 7 print(r) 8 #执行结果 9 deng10 11111 12 def f2():13     print('derby')    #函数中没有return,默认返回None14 15 re=f2()16 print(re)17 18 #执行结果19 derby20 None
return

 

 函数的参数

1.普通参数  通过调用函数,传入参数,并且一一对应

1 #定义和调用函数 2 def f1(name):        #name为f1函数的形式参数,简称:形参3     print ('Hello,%s'%name)4     return 'yes'     5 6 r=f1('derby')         #derby为传入f1的实际参数,简称:实参7 print(r)8 9 Hello,derby
View Code

2.默认参数  默认参数要放在参数列表的最后

1 def f1(name,classroom=13): 2     print ('Hello,%s you classroom is %s'%(name,classroom)) 3     return 'yes' 4  5 r1=f1('derby',15)  #指定参数 6  7 r=f1('derby')      #使用默认的参数 8  9 结果:10 Hello,derby you classroom is 1511 Hello,derby you classroom is 13
View Code

3.指定参数   正常情况下,给函数传参数要按顺序,不想按顺序就可以用指定参数,只需指定参数名即可

   但记住一个要求就是,关键参数必须放在位置参数之后。

1 def f1(name,classroom=13):2     print ('Hello,%s you classroom is %s'%(name,classroom))3     return 'yes'4 5 r=f1(classroom=15,name='hangbazi')
View Code

4.动态参数 一个形参可以接受多个参数,一个"*"默认放在元祖里,两个"**"默认放在字典里

1 def f1(classroom,*name): 2     print ('Hello,%s your classroom is %s'%(name,classroom)) 3     return 'yes' 4  5 li=['cangjingkong','wutonglan','marliya'] 6  7 #使用方式一,一个一个的传入 8 f1(15,'cangjingkong','wutenglan','mariya') 9 10 #使用方式二,列表的方式传入11 f1(15,*li)    #传入多个参数时,相当于做for循环加入元祖12 f1(15,li)     ##默认情况会把传进来的参数,放进一个元祖里13 14 结果:15 Hello,('cangjingkong', 'wutenglan', 'mariya') your classroom is 1516 Hello,('cangjingkong', 'wutonglan', 'marliya') your classroom is 1517 Hello,(['cangjingkong', 'wutonglan', 'marliya'],) your classroom is 15
动态参数之 * tuple
1 def f1(classroom,**name): 2     print ('Hello,%s your classroom is %s'%(name,classroom)) 3     return 'yes' 4  5 #li=['cangjingkong','wutonglan','marliya'] 6 dic={
'name1':'cangjingkong','name2':'wutenglan','name3':'marliya'} 7 8 #使用方式一,一个一个的传入 9 f1(15,name1='cangjingkong',name2='wutenglan',name3='mariya')10 11 #使用方式二,字典的方式传入12 f1(15,**dic) 13 14 结果:15 Hello,{
'name3': 'mariya', 'name2': 'wutenglan', 'name1': 'cangjingkong'} your classroom is 1516 Hello,{
'name3': 'marliya', 'name2': 'wutenglan', 'name1': 'cangjingkong'} your classroom is 15
动态参数之 ** 字典
1 #注意万能参数用法一个*在前,两个** 在后 2  3 def f1(*classroom,**name): 4     print ('Hello,%s classroom in %s'%(name,classroom)) 5     return 'yes' 6  7 li=[15,16,17] 8 dic={
'name1':'cangjingkong','name2':'wutenglan','name3':'marliya'} 9 10 #使用方式一,一个一个的传入11 f1(15,16,17,name1='cangjingkong',name2='wutenglan',name3='mariya')12 13 #使用方式二,字典列表的方式传入14 15 f1(*li,**dic)16 17 结果:18 Hello,{
'name1': 'cangjingkong', 'name3': 'mariya', 'name2': 'wutenglan'} classroom in (15, 16, 17)19 Hello,{
'name1': 'cangjingkong', 'name3': 'marliya', 'name2': 'wutenglan'} classroom in (15, 16, 17)
动态参数之万能用法
1 #format 格式化输出普通用法 2 >>> s = 'I am {0},age:{1}'  #{0}{1}为占位符 3 >>> s.format('derby',18) 4 'I am derby,age:18' 5 >>> s.format(*['derby',19])   #使用动态参数用法 6 'I am derby,age:19' 7  8 #上面传入为tumple,还可以传入字典 9 10 >>> s = 'I am {name},age:{age}'.format(name='derby',age=18)11 >>> print (s) 12 I am derby,age:18    13 14 #传入字典方式15 >>> dic = {
'name':'derby','age':18}16 >>> s.format(**dic)17 'I am derby,age:18'
动态参数用法之format

 

函数补充知识点

Python中传递参数是复制一份传入,还是应用传入的参数?

1 >>> def f1(a1):2     a1.append(999)3 4     5 >>> li=[11,22,33,44]6 >>> print(f1(li))            #当函数没有return 返回None7 None 8 >>> print(li)                #可以看出行数传参是引用9 [11, 22, 33, 44, 999]

 

Python 函数的变量

1 #局部变量 2  3 >>> def f1():           #局部变量name 只能在函数内进行调用 4     name='derby' 5     print(name)     6 >>> def f2():           #无法调用上面的局部变量 7     print(name) 8  9 #全局变量 潜规则:全局变量都大写10 #注意对于字典,列表,读的时候可以修改,不可重新赋值11 12 >>> NAME='derby'        #定义全局变量13 >>> def f1():14     age=1815     NAME='123'         #局部赋值只能在函数内部使用16         #gloab NAME        #重新全局赋值使用 gloab NAME17     print(age,NAME)18 19 >>> def f2():20     age=1921     print(age,NAME)22     23 >>> f1()24 18 12325 >>> f2()26 19 derby

 三元运算

三元运算(三目运算),是对简单的条件语句的缩写。

1 #书写格式2 3 return =值1  if  条件成立 else 值24 5 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量6 7 示例8 x="derby" if 19>18 else "alex"

 

lambda 表达式

1 #普通定义函数返回值 2 >>> def f1(a1): 3     return a1+100 4  5 #使用lambda表达式  6 >>> f2 = lambda a1,a2:a1+a2+120   7  8 >>> f1(120) 9 22010 >>> f2(120,130)11 370
lambda 示例

 

内置函数

Python所有的内置函数如下:

内置函数使用示例

1 >>> n=abs(-1)2 >>> print(n)3 1
abs取绝对值 
1 #python 中 布尔为False有 0,None,' ',[],() 2 >>> print(bool(0)) 3 False 4 >>> print(bool(None)) 5 False 6 >>> print(bool('')) 7 False 8 >>> print(bool([])) 9 False10 >>> print(bool(()))11 False12 #all 只要有一个为False 即False13 >>> n = all ([1,2,3,None])14 >>> print (n)15 False16 #any 只要有一个为真即为True17 >>> n = any([0,'',None,13])18 >>> print (n)19 True
all,any
1 #进制转换2 >>> print(bin(10))    #转换成二进制0b3 0b10104 >>> print(oct(10))     #转换成8进制 0o5 0o126 >>> print(hex(10))    #转换成16进制0x7 0xa
bin,oct,hex
1 # bytes 字符串转换成字节,表现形式为16进制,占用空间最少 2 >>> s = '等一程' 3 >>> n = bytes(s,encoding='utf-8')  #utf-8编码一个汉字为3个字节 4 >>> print(n) 5 b'\xe7\xad\x89\xe4\xb8\x80\xe7\xa8\x8b' 6 >>> n = bytes(s,encoding='gbk')    #GBK编码一个汉字为2个字节 7 >>> print (n) 8 b'\xb5\xc8\xd2\xbb\xb3\xcc' 9 10 #字节编码成字符串11 >>> s = str(bytes(s,encoding='utf-8'),encoding='utf-8')12 >>> print (s)13 等一程
bytes 字符转换
1 #callable 检测能否传入的值能否被调用 2 def f1(): 3     pass 4  5 f2 = 123 6  7 print(callable(f1)) 8 print(callable(f2)) 9 j结果:10 Ture11 False12 13 #对照ASCII码表 将数字转化成字母14 >>> r = chr(65)15 >>> print (r)16 A17 #对照ASCII标码表 将字母转化成数字18 >>> r = ord("a")19 >>> print(r)20 97
callbale,chr,ord
1 import random 2  3 #创建6个大写的字母 4 li = [] 5 for i  in  range(6): 6     temp = random.randrange(65,91) 7     c = chr(temp) 8     li.append(c) 9 result = ''.join(li)10 print(result)11 12 13 ASWEFK
chr 生成随机验证码
1 #生成数字字母随机数 2 li = [] 3 for i  in  range(6): 4     if i == 2 or i==4: 5         temp = random.randrange(0,10) 6         #c = chr(temp) 7         li.append(str(temp)) 8     else: 9         temp = random.randrange(65, 91)10         c = chr(temp)11         li.append(c)12 result = ''.join(li)13 print(result)
字母+字符随机

 

1 #生成完全随机数 2 li = [] 3 for i  in  range(6): 4     r = random.randrange(0,5) 5     if i == 2 or i==4: 6         temp = random.randrange(0,10) 7         #c = chr(temp) 8         li.append(str(temp)) 9     else:10         temp = random.randrange(65, 91)11         c = chr(temp)12         li.append(c)13 result = ''.join(li)14 print(result)
完全随机数

 

重要函数值 complile(),evel(),exec()

1 #compile() 编译字符成Python代码 2 #exec() 编译成跟Python一样的代码,只执行,没有返回值 3  4 s = 'print(123)' 5 #将字符串编译Python代码 6 r = compile(s,'
','exec') 7 #执行Python代码 8 exec(r) 9 结果:10 12311 12 #eval() 只编译执行表达式,有返回值13 t = "8*8"14 ret = eval(t)15 print (ret)16 结果:17 64

 

1 # dir 快速查看,对象提供了哪些功能 2 #print(dir(list)) 3 #print(dir(dict)) 4 # help 查看对象的帮助,有哪些参数 5 #help(list) 6  7 #做除法,返回商,和余数 8 n1,n2 = divmod(9,5) 9 print(n1,n2)10 1 411 12 s = "derby"13 ret = isinstance(s,list) #判断某个对象是否是某个类的实例14 print(ret)15 16 False
dir,help,divmod,isinstance
1 #filter 过滤 2 def f2(a): 3     if a > 22: 4         return True 5 li = [11,22,33,44,55,66] 6 #filter内部,循环第二个参数,将每个元素传入第一个函数 7 #如果函数返回值为True,则元素合法,加入filter内部列表 8 ret = filter(f2,li) 9 print(list(ret))10 结果:[33,44,55,66]11 12 #lamdba 函数能自动return13 f1 = lambda a: a >3014 ret = f1(90)15 print(ret)16 True17 #filter 和lambda 结合使用18 result = filter(lambda a:a>22,li)19 print (list(result))20 结果:[33,44,55,66]21 22 23 24 #map (函数,可迭代的对象(可以for循环的东西)将后面的参数依次传入前面的函数,结果写入列表)25 li = [11,22,33,44,55,66]26 #def f2(a):27 #     return a+100:28 29 #result = map(f2,li)30 result = map(lambda a: a+100,li)31 print (list(result))
filter(),map()
1 #globals () 打印所有的全局变量 locals() 打印所有的局部变量 2 NAME='derby' 3 def f2(): 4     a=123 5     b=a+100 6     print(locals())   # 打印a,b 为局部变量 7     print(globals())  #打印NAME 和系统内置的全局变量 8  9 f2()10 11 12 #hash()将一个传入的对象,转为哈希值,一般在字典里使用13 #作用一节省内存空间,作用二,根据哈希值查找方便14 15 >>> s = 'marliyasdfdfdfsdfdfsdf'16 >>> print(hash(s))17 -729541471663737928418 >>> 19 #python 3.x  默认是按字符找,2.0 默认是按字节找20 >>> s='中国'21 >>> print(len(s))22 223 >>> b = bytes(s,encoding='utf-8')24 >>> print(len(b))25 6
locals,globals,hash(),len()
1 # sum() 求和 max() 最大值 min()最小值 2 print(sum([11,23,34,12])) 3 print(max([11,23,34,12])) 4 print(min([11,23,34,12])) 5  6 # pow() 求平方 7 r = pow(2,10) 8 print(r) 9 10 li= [23,42,23]11 # repr() 执行类中的 _repr_ 函数12 repr('dengbin')13 14 #reversed() 反转15 reversed(li)16 17 #round() 四舍五入18 print(round(1.23))
sum,max,min,pow,repr,reversed
1 #sorted 排序 2 >>> li=[23,45,43] 3 >>> print(sorted(li)) 4 [23, 43, 45] 5 >>>  6  7 #zip () 将几个列表对应的元素放进一个元组里 8  9 l1 = ['deng',11,23]10 l2 = ['bin','11',22]11 r = zip(l1,l2)12 #print(list(r))      #结果:[('deng', 'bin'), (11, '11'), (23, 22)]13 temp  = list(r)[0]14 print (temp)15 ret = ' '.join(temp)16 print(ret)17 18 结果:19 ('deng', 'bin')20 deng bin
sorted(),zip()

 

 
 
 

 

转载于:https://www.cnblogs.com/derby/p/5967447.html

你可能感兴趣的文章
python3 套接字练习
查看>>
xp的异步复制几条命令
查看>>
javascript里面的document.head在IE下面不兼容问题
查看>>
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
查看>>
我的友情链接
查看>>
《Windows fun 7》一:MVVM for Windows Phone 7
查看>>
U盘安装64位Ubuntu操作系统
查看>>
Bindshell原理
查看>>
Andriod底层第三课---启动流程
查看>>
单列索引和复合索引的使用
查看>>
python列出一个文件夹及其子目录的所有文件
查看>>
CCNP笔记第一天
查看>>
80后使用吵架约定,非常实用
查看>>
linux测试硬盘坏道
查看>>
Perl中关于用户定义子程序的返回值(基础)
查看>>
LINQ系列:Linq to Object分区操作符
查看>>
zabbix-agent-for-Debian
查看>>
学习日志---python(函数式编程)
查看>>
nohup命令--让命令后台不中断运行
查看>>
cisco之路由器DHCP配置
查看>>