跟着老男孩教育学Python开发【第三篇】:Python函数

set

无序,不重复,可嵌套。

函数

创建函数:

1、def关键字,创建函数

2、函数名

3、()

4、函数体

5、返回值

发邮件函数

  1. def sendmail():
  2.     import smtplib
  3.     from email.mime.text import MIMEText
  4.     from email.utils import formataddr
  5.     #三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
  6.     msg = MIMEText(‘邮件内容‘,‘plain‘,‘utf-8‘)
  7.     msg[‘From‘] = formataddr(["发件人名称",‘发件人邮箱‘])
  8.     msg[‘To‘] = formataddr(["哈哈",‘收件人邮箱‘])
  9.     msg[‘Subject‘] = "邮件主题"
  10.  
  11.     server = smtplib.SMTP("smtp地址",端口)
  12.     #需要在开启SMTP,否则发送失败
  13.     server.login("发件人邮箱","密码")
  14.     server.sendmail(‘发件人邮箱‘,[‘收件人邮箱‘],msg.as_string())
  15.     server.quit()
  16. sendmail()

函数中的return

  1. def f1():
  2.     print(123)
  3.     #在函数中,一旦执行return,函数执行过程立即终止
  4.     return "111"
  5.     print(456)
  6.  
  7. r = f1()
  8. print(r)

函数的默认返回值None

  1. def f2():
  2.     print(123)
  3.  
  4. r = f2()
  5. print(r)

普通参数

  1. #形参【形式参数】:xx
  2. def sendmail(xx,content):
  3.     import smtplib
  4.     from email.mime.text import MIMEText
  5.     from email.utils import formataddr
  6.     #捕获异常
  7.     try:
  8.         msg = MIMEText(content,‘plain‘,‘utf-8‘)
  9.         msg[‘From‘] = formataddr(["Golden",‘发件人地址‘])
  10.         msg[‘To‘] = formataddr(["哈哈",‘收件人地址‘])
  11.         msg[‘Subject‘] = "主题"
  12.  
  13.         server = smtplib.SMTP("smtp.126.com",25)
  14.         server.login(‘发件人地址‘,‘密码‘)
  15.         server.sendmail(‘发件人地址‘,[xx],msg.as_string())
  16.         server.quit()
  17.     except:
  18.         #发送失败
  19.         return False
  20.     else:
  21.         #发送成功
  22.         return True
  23.  
  24. #实际参数:收件人1\收件人2
  25. # ret = sendmail("收件人1")
  26. # ret = sendmail("收件人2")
  27.  
  28. while True:
  29.     em = input("请输入收件人邮箱地址:")
  30.     result = sendmail(em,"你好")
  31.     if result == True:
  32.         print("发送成功")
  33.     else:
  34.         print("发送失败")

默认参数

  1. def send(xx,content,hh="ok"):
  2.     print(xx,content,hh)
  3.     print("发送邮件成功:",xx,content)
  4.     return True
  5.  
  6. send("hahaha",‘hello‘)
  7. send("hahaha",‘hello‘,‘bbbb‘)

注意:如果需要给某个参数指定默认值,该参数必须放在参数列表的最后。

指定参数

  1. def send(xx,content):
  2.     print(xx,content)
  3.     return True
  4.  
  5. send("hahaha","hello")
  6. send(content="hahaha",xx="hello")

动态参数:*

  1. def f1(*args):
  2.     print(args,type(args))
  3.  
  4. f1(11,22,33,"haha","hello")
  5.  
  6. li = [12,23,33,"hahaha","hi"]
  7. f1(li)
  8. f1(*li)

注意:*默认将传入的参数全部放置在元组中,f1(*li)。

动态参数:字典(**)

  1. def f1(**args):
  2.     print(args,type(args))
  3.  
  4. f1(n1="alex",kk=18)
  5. dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘}
  6. f1(**dic)

注意:**默认将传入的参数全部放置在字典中,f1(**dic)。

万能参数

  1. def f1(*args,**kwargs):
  2.     print(args)
  3.     print(kwargs)
  4.  
  5. f1(11,22,33,44,k1=‘v1‘,k2=‘v2‘)

注意:*args,**kwargs顺序不能改变。

动态参数实现format功能

  1. s = "i am {0},age {1}".format("alex",18)
  2. print(s)
  3.  
  4. s1 = "i am {0},age {1}".format(*["alex",19])
  5. print(s1)
  6.  
  7. s2 = "i am {name},age {age}".format(age=20,name=‘alex‘)
  8. print(s2)
  9.  
  10. dic ={‘name‘:‘alex‘,‘age‘:21}
  11. s3 = "i am {name},age {age}".format(**dic)
  12. print(s3)

猜一猜输出

  1. def f1(a1,a2):
  2.     print(‘+‘)
  3.     return a1 + a2
  4.  
  5. def f1(a1,a2):
  6.     print(‘*‘)
  7.     return a1 * a2
  8.  
  9. ret = f1(8,8)
  10. print(ret)
  1. def f1(a1):
  2.     a1.append(999)
  3.  
  4. li = [11,22,33,44]
  5. f1(li)
  6.  
  7. print(li)

注意:函数参数传递的是引用。

全局变量

  1. NAME = "alex"
  2. AGE = 22
  3.  
  4. def f1():
  5.     num = 18
  6.     NAME = "haha"
  7.     #修改全局变量:age
  8.     global AGE
  9.     AGE = 25
  10.     print(num,AGE,NAME)
  11.  
  12. def f2():
  13.     num = 19
  14.     print(num,AGE,NAME)
  15.  
  16. f1()
  17. f2()

注意:全局变量重新赋值需要用global,对于列表或字典,可修改,不可重新赋值。定义全局变量全部大写。

函数实现登录与注册

  1. def login(username,password):
  2.     """
  3.     用于用户登录
  4.     :param username: 用户输入的用户名
  5.     :param password: 用户输入的密码
  6.     :return:True,登录成功;False,登录失败
  7.     """
  8.     f = open("db",‘r‘)
  9.     #逐行读取
  10.     for line in f:
  11.         #用"|"进行分割
  12.         line_list = line.strip().split("|")
  13.         #匹配是否正确
  14.         if line_list[0] == username and line_list[1] == password:
  15.             return True
  16.     return False
  17.  
  18.  
  19. def register(username,password):
  20.     """
  21.     用户注册
  22.     :param username:用户名
  23.     :param password:密码
  24.     :return:默认返回None
  25.     """
  26.  
  27.     f = open("db",‘a‘)
  28.     temp = "\n"+username + "|" + password
  29.     f.write(temp)
  30.     f.close()
  31.  
  32.  
  33. def main():
  34.     t = input("1:登录;2:注册")
  35.     if t == "1":
  36.         user = input("请输入用户名:")
  37.         pwd = input("请输入密码:")
  38.         r = login(user,pwd)
  39.         if r:
  40.             print("登录成功")
  41.         else:
  42.             print("登录失败")
  43.     elif t == "2":
  44.         user = input("请输入用户名:")
  45.         pwd = input("请输入密码:")
  46.         register(user,pwd)
  47.  
  48. main()

三元运算(三目运算)

  1. if 1 == 1:
  2.     name = "alex"
  3. else:
  4.     name = "golden"
  5.  
  6. #上面代码等价于
  7. name = "alex" if 1 == 1 else "golden"

lambda表达式

  1. def f1(a1):
  2.     return a1 + 100
  3.  
  4. #等价上面的代码
  5. f2 = lambda a1:a1 + 100
  6.  
  7. ret = f1(10)
  8. print(ret)
  9.  
  10. r2 = f2(9)
  11. print(r2)

内置函数

  1. #abs():取绝对值
  2. n = abs(-1)
  3. print (n)
  4.  
  5. #all():所有为真,才为真
  6. #any():任何一个为真,就是真
  7. n = all([1,2,3,4,[]])
  8. print(n)
  9.  
  10. n2 = any([1,[],0,"",None])
  11. print(n2)
  12.  
  13. #ascii():自动执行对象的 _repr_方法
  14. class Foo:
  15.     def _repr_(self):
  16.         return "111"
  17. n = ascii(Foo())
  18. print(n)
  19.  
  20. #bin():转二进制
  21. #oct():转八进制
  22. #hex():转十六进制
  23. print(bin(5))
  24. print(oct(9))
  25. print(hex(15))
  26.  
  27. #utf-8 一个汉字:三个字节
  28. #gbk 一个汉字:二个字节
  29.  
  30. #utf-8,一个字节八位,一个汉字三个字节
  31. s = "李杰"
  32. #字符串转换字节类型
  33. #bytes(需要转换的字符串,按照什么编码)
  34. n = bytes(s,encoding="utf-8")
  35. print(n)
  36. n = bytes(s,encoding="gbk")
  37. print(n)
  38.  
  39. #字节转化成字符串
  40. new_str = str(bytes("李杰",encoding="utf-8"),encoding="utf-8")
  41.  
  42. #1、打开文件
  43. #只读
  44. f = open(‘db‘,‘r‘)
  45. #只写,先清空源文件
  46. f = open(‘db‘,‘w‘)
  47. #文件存在,报错;不存在,创建并写内容
  48. f = open(‘db‘,‘x‘)
  49. #追加
  50. f = open(‘db‘,‘a‘)
  51. #2、操作文件
  52. #通过源码查看功能
  53. f.read()
  54. f.write()
  55.  
  56. #3、关闭文件
  57. f.close()
  58. with open(‘db‘) as f:
  59.     pass
  60.  
  61. f = open(‘db‘,‘r‘,encoding="GBK")
  62. #f = open(‘db‘,‘r‘,encoding="utf-8")
  63. data = f.read()
  64. print(data,type(data))
  65. f.close()
  66.  
  67. f = open("db","r+",encoding="utf-8")
  68. #如果打开模式无b,则read,按照字符读取
  69. data = f.read()
  70. #获取当前指针的位置(字节)
  71. print(f.tell())
  72. print(data)
  73. #移动当前指针到固定位置(字节)
  74. f.seek(1)
  75. #当前指针位置开始向后覆盖
  76. f.write("777")
  77. f.close()
  78.  
  79. f = open(‘db‘,‘rb‘)
  80. data = f.read()
  81. print(data,type(data))
  82.  
  83. f = open(‘db‘,‘ab‘)
  84. f.write(bytes("李杰",encoding="utf-8"))
  85. f.close()

flush()强刷:

  1. f = open("db",‘a‘)
  2. f.write("123")
  3. #强制写入
  4. f.flush()
  5. input("adsdds")

readable()查看文件是否可读,返回True或False。

  1. f = open("db",‘w‘)
  2. print(f.readable())

readline()仅读取一行数据,当文件特别大的时候不至于导致内存撑爆。

  1. f = open("db",‘r‘)
  2. f.readline()
  3. f.readline()

truncate()截断,指针后面的数据清空

  1. f = open("db",‘r+‘,encoding="utf-8")
  2. f.seek(3)
  3. f.truncate()
  4. f.close()

for循环打开的文件对象:

  1. f = open("db",‘r‘)
  2. for line in f:
  3.     print(line)
  4. f.close()

将文件1的前十行写入文件2:

  1. with open(‘db1‘,‘r‘,encoding="utf-8") as f1,open(‘db2‘,‘w‘,encoding="utf-8") as f2:
  2.     times = 0
  3.     for line in f1:
  4.         times += 1
  5.         if times <= 10:
  6.             f2.write(line)
  7.         else:
  8.             break

将文件的某个字符串进行替换:

  1. with open(‘db1‘,‘r‘,encoding="utf-8") as f1,open("db2",‘w‘,encoding="utf-8") as f2:
  2.     for line in f1:
  3.         new_str = line.replace("alex","st")
  4.         f2.write(new_str)
时间: 2024-10-25 07:37:47

跟着老男孩教育学Python开发【第三篇】:Python函数的相关文章

Python开发第三篇

函数 一.函数参数传值 形参:函数在定义的时候给定的参数 实参:函数在运行时赋给的参数: 1 def func(i):#i为定义时的参数,为形参 2 pass 3 func(name)#name为运行时的参数,为实参,实参与形参的名字可以相同 传值方式: 位置传值:按照定义时的顺序,用实参给形参赋值 1 def func(x,y,z): 2 print("x->",x) 3 print("y->",y) 4 print("z->"

Python基础第三篇:函数

一.Python函数介绍 1.函数的作用 规范代码使代码变得逻辑性更强 提高可读性,方便管理,降低维护成本,以及降低代码冗余 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 2.函数定义 以 def 关键词开头,后接函数标识符名称和圆括号(),def df() 函数参数必须写在括号中,可以定义多个参数def df(参数1,参数2,参数3.....) 函数内部第一行建议放函数说明 一般带参数的会有return,不带参数的没有,不带return相当于返回 None 3.函数分类

Python开发【第一篇】:目录

本系列博文改编自武沛齐老师的原创博文,主要包含  Python基础.前端开发.Web框架.缓存以及队列等内容 ,用于学习记录成长!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python

跟着老男孩教育学Python开发【第一篇】:初识Python

Python简介 Python前世今生 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 注:ABC语言是由Guido参与设计的一种教学语言,是专门为非专业程序员设计的.就Guido本人看来,ABC这种语言非常优美和强大,但是ABC语言并没有成功,究其原因,Guido认为是非开发造成的.Guido决心在Python中避免这一错误.同时,他还想实现在AB

Python开发【第一篇】:初识Python

Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五!!! 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众

图解Python 【第三篇】:Python-函数

本节内容一览图 一.函数介绍 1.什么是函数 2.定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. 函数内容以冒号起始,并且缩进. return [表达式] 结束函数,选择性地返回一个值给调用方.不带表达式的return相当于返回 None. 注意: 函数在执行过程中只要遇到

Python开发【第二篇】:初识Python

Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第四!!!   Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都

Eclipse和PyDev搭建完美Python开发环境 Windows篇

1,安装Python Python是一个跨平台语言,Python从3.0的版本的语法很多不兼容2版本,官网找到最新的版本并下载:http://www.python.org, 因为之前的一个项目是2版本开发的,故下载了2.7 2,在Windows命令行中使用Python 如果你想要从Windows命令行调用Python,那么需要先设置Python环境变量. 编辑PATH环节便利将;D:\dev\python2.7.11加到它的结尾.当然,是Python所在的安装目录. 3,测试python环境变量

Python开发【第一篇】:Python简介

Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 2016年11月TIOBE语言排行榜 甩PHP几条街 由上图可见,Python呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联

Python开发【第一篇】基础题目二

1 列表题 l1 = [11, 22, 33] l2 = [22, 33, 44] # a. 获取l1 中有,l2中没有的元素 for i in l1: if i not in l2: print(i) # 11 # b. 获取l2 中有,l1中没有的元素列表 for i in l2: if i not in l1: print(i) # 44 # c. 获取l1 和 l2 中内容相同的元素 for i in l1: if i in l2: print(i, end=" ") # 22