自学Python之路-Python基础+模块+面向对象
自学Python之路-Python网络编程
自学Python之路-Python并发编程+数据库+前端
自学Python之路-djangohtml
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提升应用的模块性,和代码的重复利用率。前端
def functioname函数名(parameters参数) " 文档字符串 " 函数体 return()返回值
以上边的示例为例,调用方法很简单执行以下代码。python
functionname(参数) 数据库
注意,函数定义好以后,并不会运行。只有在调用的时候会运行。django
def cal(): n=123 n+=1 print(n) cal() #执行函数 c=cal # 变量C指向函数cal c() # 同cal()同样
输出编程
124
124数组
函数名应该为小写,能够用下划线风格单词以增长可读性。如:myfunction,my_example_function。网络
Python之父Guido推荐的命名规范包括以下几点:
①模块名和包名采用小写字母而且如下划线分隔单词的形式;
②类名采用以大写字母开头,而且以大写字母分隔单词的形式命名;
③全局或者类常量,所有使用大写字母,而且如下划线分隔单词;其他变量命名则是采用所有小写字母,而且如下划线分隔单词的形式命名。
④以上的内容若是是内部的,则使用下划线开头命名。数据结构
形参:def函数后面的变量,()内的变量
实参:调用函数时候用的值,也叫参数并发
import smtplib from email.mime.text import MIMEText from email.utils import formataddr def mail(user): ret=True try: msg = MIMEText('邮件内容', 'plain', 'utf-8') msg['From'] = formataddr(["carlos", 'carlos@126.com']) msg['To'] = formataddr(["carlos_chiang", user]) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("carlos@126.com", "邮箱密码") server.sendmail('carlos@126.com', [user, ], msg.as_string()) server.quit() except Exception: ret=False return ret ret=mail('422417945@qq.com') ret=mail('422417946@qq.com') ret=mail('422417947@qq.com') if ret: print('发送成功') else: print('发送失败')
经过定义参数,能够给3我的发送邮件,简化了代码。
参数如何使用?
①无参数def show():
show()
②一个参数def show(arg)
show('aaaa')
③二个参数def show(arg,chr)
show('aaaa','bbbbb') (若只赋值一个参数,会报错)
.......
函数的参数分为三类:默认参数、指定参数、可变参数
1. 在函数中默认参数赋值a, 在函数外若该参数无赋值,将直接采用赋值a ;
2. 在函数中默认参数赋值a,在函数外若该参数赋值b,将采用赋值b
def show(a,b=100): # 默认参数b=100 这种写法错误def show(a=111,b): print(a,b) show(200) # 只有一个赋值,默认是给第一个赋值
输出200 100
def show(a,b=100): print(a,b) show(200,300)
输出200 300
def functionname(name,age=18): print("I'm %s, age %s" % (name, age)) functionname(age=26,name="carlos") #上述默认age参数为18,若是这里不指定age的话,默认会使用18,可是若是咱们指定参数的话,优先会执行咱们指定的参数值。
输出 I'm carlos, age 26
举例1
def function_name(*args): print(args, type(args)) function_name(1) function_name(1,2,3)
输出
(1,) <class 'tuple'>
(1, 2, 3) <class 'tuple'>
由此能够看出,默认将传入的参数,所有放在元组中,即args = (...),在执行()的时候,会进行tuple.__init__方法。
def function_name(*args): print(args, type(args)) function_name(1,2,3) function_name(*'wzg') function_name(*['jack','tony'])
今后能够看出,能够看出带*的参数,会循环变量中的每一个元素加入至tuple中。字符串的话循环每一个字母。若是传入的是个列表或者元组,返回的是列表,元组中的每一个元素。class类型都是做为'tuple'返回。
def function_name(*args): for name in args: print(name,type(name)) function_name('liupeng','jack',11,22,['a','b','c'])
输出
liupeng <class 'str'>
jack <class 'str'>
11 <class 'int'>
22 <class 'int'>
['a', 'b', 'c'] <class 'list'>
基于*args案例的基础上添加了for循环语句,循环的是args中的每一个元素并显示元素的类型。从上例能够看出*接收的不光能够是一个字符串,还能够是数字或者列表。
def function_name(**args): print(args,type(args)) function_name(name = 'wzg',job = "IT") #key1=name value=wzg key2=job value=IT
输出
{'name': 'wzg', 'job': 'IT'} <class 'dict'>
举例2
dic = {'k1':'v1','k2':'v2'} def function_name(**dic): print(dic) function_name(**dic)
输出
{'k1': 'v1', 'k2': 'v2'}
举例3
dic = {'k1':'v1','k2':'v2'} def function_name(**dic): print(dic) function_name(di=dic)
输出
{'di': {'k1': 'v1', 'k2': 'v2'}}
分析以上3个例子的结果:
①函数自己不用多说,当咱们在第一次调用函数时由于参数咱们指定了(name跟job的)参数所以打印时候直接输出了字典keys为name跟job,values为wzg,IT即 {'name': 'wzg', 'job': 'IT'} <class 'dict'>。
②在第二次调用函数时,会发现咱们此次调用函数()中传的参数也是**的方式。这里提早建立了一个dic的字典并把它做为函数的参数使用。结合**的用法,使得字典中每一个元素做为参数传到函数中被调用。
即{'k2': 'v2', 'k1': 'v1'} <class 'dict'>。
③最后一次调用函数时,咱们参数是这么指定的(di = dic),这里能够看出跟1的使用方法相同。对了,没错。此次只不过是咱们把整个dic做为了字典中的values来传入函数了而di作为了字典中的key。即
{'di': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
总结:上面1-3无论那一种的类型最终都是<class 'dict'>也就是说**args,或者**其余什么变量最终生成的结果都是以字典的方式呈现。而*args最终都是以元组的方式呈现。
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) show(11,22,33,44,n1=88,carlos='boy')
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) i=[11,22,33,44] j={'n1':88,'carlos':'boy'} show(*i,**j)
以上均输出
(11, 22, 33, 44) <class 'tuple'>
{'n1': 88, 'carlos': 'boy'} <class 'dict'>
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) i=[11,22,33,44] j={'n1':88,'carlos':'boy'} #若是这样定义,至关于将i,j都放到args中,结果致使kwargs 字典为空 show(i,j)
输出
([11, 22, 33, 44], {'n1': 88, 'carlos': 'boy'}) <class 'tuple'>
{} <class 'dict'>
Python有一种独一无二的的注释方式: 使用文档字符串. 文档字符串是包, 模块, 类或函数里的第一个语句.。这些字符串能够经过对象的__doc__成员被自动提取, 而且被pydoc所用。
函数注释包含如下几个部分:
1.总体功能说明 2.输入参数说明 3.输出/返回值说明 4.异常说明 5.其余
函数主体部分就是代码逻辑的实现/处理过程。
①函数返回值是一个可选的选项,能够返回一个表达式、某种数据结构等
②默认返回None输出
import smtplib from email.mime.text import MIMEText from email.utils import formataddr def mail(): ret=True try: msg = MIMEText('邮件内容', 'plain', 'utf-8') msg['From'] = formataddr(["carlos", 'carlos@126.com']) msg['To'] = formataddr(["carlos_chiang", '422417945@qq.com']) msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25) server.login("carlos@126.com", "邮箱密码") server.sendmail('carlos@126.com', ['422417945@qq.com', ], msg.as_string()) server.quit() except Exception: ret=False return ret ret=mail() print(ret)
输出
False (缘由为‘邮箱密码’,若输入正确密码,则输出为True)
在函数或者类中,若出现return,后续代码不执行。
def show(): print('a') return([11,22]) print('b') s=show()
输出a