一,函数的定义

1,函数mylen叫做函数名

  #函数名
  #必须由字母下划线数字组成,不能是关键字,不能是数字开头
  #函数名还是要有一定的意义能够简单说明函数的功能

2,def是关键字 (define)

3,():必须写

4,函数体内尽量写注释,方便查看代码

5,函数的调用:函数名+括号

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def mylen(): #函数名
'''
计算字符串长度的函数 这里写的是注释,方便查看代码
'''
s = 'hello world'
length = 0
for i in s:
length += 1
return length #函数的返回值
leng = mylen() #函数的调用
print(leng)

二,函数的返回值 return

1,函数返回值可以是任意的数据类型

2,如果有返回值:必须要用变量接收才会有效果

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def func():
b = [1,2,3]
return b #可以是任何数据类型
ret = func() #有返回值,就需要用变量来接收
print(ret)

3,函数可以没有返回值,默认返回给None
      函数的返回值为None有三种情况
      1.不写返回值
      2.只写一个return
      3.return None (几乎不用)

4,return的作用:结束一个函数的执行

5,函数的返回值不为None,有返回值
     返回一个值(一个变量)
     返回多个值(多个变量),多个值之间用逗号区分
     接收:可以用一个变量接收,以元组的形式返回
     也可以用多个变量接收,返回几个就用几个变量去接收 相当于解压式接收

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def func6():
'''返回一个值'''
a =123
return a def func7():
'''返回多个值'''
a = 123
b = 'abc'
return a,b ret = func7()
print(ret)
m,n,k = func7()

三,函数的参数

实参:函数调用的时候传入的参数

形参:函数定义的时候括号内的参数

参数可以是任意的数据类型,可以传送0个或者多个参数

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def mylen(s): #参数接收:形式参数,形参
'''
计算字符串长度的函数 ——函数的功能
参数s:接收要计算的字符串 ——参数的信息
return:要计算的字符串长度 ——返回值的信息
'''
length = 0
for i in s:
length += 1
return length
length = mylen('hello world') #参数传入:实际参数,实参
print(length)

调用时传参数(实参)

实参,遵循 位置参数--关键字参数

*按照位置参数传参:按顺序定义参数

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def my_max(a,b): #定义:位置参数
'''返回两个值之间的最大值'''
print(a,b)
if a > b:
return a
else:
return b
print(my_max(10,20))
print(my_max(30,20))

*按照关键字参数传参:可以不按顺序传参数

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def my_max(a,b): #定义:关键字参数
'''返回两个值之间的最大值'''
print(a,b)
if a > b:
return a
else:
return b
print(my_max(b = 10,a = 20))

定义时候参数(形参)

形参,遵循 位置参数--默认参数

*默认参数

*不要设置可变类型的默认参数

*默认参数可以不传,不传用的是默认值,传参数的话需要用关键字传参,才可以覆盖默认值

*默认值是在定义函数的时候就已经确定了的

 #!/usr/bin/env python
#_*_coding:utf-8_*_ def stu_info(name,sex = 'male'): #默认参数,有一个默认值
print('name:%s,sex:%s'%(name,sex))
stu_info('alex') #默认参数可以不传值
stu_info('egon','female') #如果传值了,覆盖默认值

关于默认参数流程

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #关于默认参数流程
s = 'male'
def stu_info(name,sex=s): #默认参数,有一个默认值
print('name:%s,sex:%s'%(name,sex))
s = 'female' #不影响定义时sex的值
print(stu_info("李淑旗"))
#打印出来的就是male 因为开始sex=x=male,然后s是新开辟的一个空间存储female

不要这是可变类型数据为默认参数

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #不要设置可变数据类型为默认参数
b = []
def func(a = []):
a.append(1)
print(a)
# func()....打印下去你会发现这个[]列表一直在追加

动态参数

*args  接收的是实参,位置参数,将转化成元祖返回

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #*args #按位置传参数
def func(a,b,*c): #*c接收的是5,5,5,5并且输出一个元祖包含这个4个5 *args代表把散列的元素拼成元组
my_sum = a+b
for i in c:
my_sum += i
return my_sum
print(func(3,2,5,5,5,5))

*kwargs 接收的是实参,关键字参数,将转化成字典返回

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #**kwargs #按照关键字传参数
def fun(a,b,**kwargs):
print(a,b,kwargs)
fun(a = 10,b = 20,cccc= 30,dddd = 50)

行参,位置顺序

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #形式参数括号里面的位置顺序
def f(a,b,*args,defult=6,**kwargs):
#位置参数,*args,默认参数,**kwargs
print(a,b,args,defult)
#传参数的时候:必须先按照位置传参数,再按照关键字传参数
f(1,2,7,8,defult=10)

传参时候,有时候是可变得数据类型,下面是2个方法可以将不同类型数据类型打散

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #在传参的时候,针对列表,元祖的话,有个*t参数,避免手动传参
def fun2(*args):#*args代表把散列的元素拼成元组
print(args)
t = (1,2,3,4)
l = [1,2,3,4]
# fun2(t[0],t[1],t[2],t[3])
fun2(*t) #*代表把一个元组、列表拆了
fun2(*l) #*代表把一个元组、列表拆了 #针对字典有个**d参数,避免手动传参
def fun3(**kwargs):#*args代表把按关键字传来的参数拼成字典
print(kwargs)
fun3(a = 10, b = 20)
d = {'a': 10, 'b': 20}
fun3(**d) #*代表把一个字典拆了

传参时候传递的是引用

# 我们之前学过字符串的format方法
msg = "{0},{1}"
print(msg.format("joker",""))
print(msg.format(*["joker",""])) msg = "{name},{age}"
print(msg.format(name="joker",age=""))
print(msg.format(**{"name":"joker","age":""})) # 传递数据类型时候,其实传递的是引用
l = [1,2,3,4]
def f1(a1):
a1.append(999)
f1(l)
print(l) # [1, 2, 3, 4, 999] # 全局变量,通常全部大写
name = [1,2,3,4]
def f1():
global name # 直接修改
name = [111]
return
f1()
print(name) # [111] name = [1,2,3,4]
def f1():
name.append(5) # 局部不能给全局重新赋值
return
f1()
print(name) # [1, 2, 3, 4, 5]

相同函数名执行过程

# !/usr/bin/env python
# _*_coding:utf-8_*_
# Author:Joker def f1(a1,a2): #
return a1 + a2 def f1(a3,a4): #
return a3 * a4 # ret = f1(8,8) # 3 #5 print(ret) # # 开始f1的空间包含指向为a1 + a2,后来变为了a3 * a4,在实参传递的时候,你也会发现给的是a3,a4赋值

通过126发送小邮件程序

# !/usr/bin/env python
# _*_coding:utf-8_*_
# Author:Joker def sendmail():
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr msg = MIMEText('我正在通过PY给你发送邮件,别再睡了。','plain','utf-8') # 创建一个文本类型
msg['From'] = formataddr(['joker','jokerbj@126.com']) # 二元祖,发件人,发件地址
msg['Subject'] = "亲爱的POPPY君" server = smtplib.SMTP('smtp.126.com',25)
server.login('jokerbj@126.com','授权登录密码') # SMTP第三方授权登录密码
server.sendmail('jokerbj@126.com',['对方邮件地址@qq.com',],msg.as_string())
server.quit() return 1 ret = sendmail()
if ret:
print('email send success!')
 

python开发初识函数:函数定义,返回值,参数的更多相关文章

  1. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  2. python函数2(返回值、传递列表...)

    python函数2(返回值.传递列表...) 1.返回值 1.1.返回简单的值 #返回简单值 def get_formatted_name(first_name,last_name): "& ...

  3. 【C语言入门教程】5.1 函数说明 与 返回值

    C 语言是结构化语言,它的主要结构成分是函数.函数被作为一种构件,用以完成程序中的某个具体功能.函数允许一个程序的各个任务被分别定义和编码,使程序模块化.本章介绍 C 语言函数的设计,如何用函数分解程 ...

  4. 关于fork( )函数父子进程返回值的问题

    fork()是linux的系统调用函数sys_fork()的提供给用户的接口函数,fork()函数会实现对中断int 0x80的调用过程并把调用结果返回给用户程序. fork()的函数定义是在init ...

  5. [Golang]-3 函数、多返回值、变参、闭包、递归

    // test01 project main.go package main import ( "fmt" ) // 单返回值的函数 func plus(a int, b int) ...

  6. C++ 需要返回值的函数却没有返回值的情况 单例模式

    昨天在看前些天写的代码,发现一个错误. #include <iostream> using namespace std; class singleton { public: static ...

  7. 函数指针的返回值是指针数组,数组里放的是int;函数指针的返回值是指针数组,数组里放的是int指针

    函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> ...

  8. go语言基础之函数只有一个返回值

    1.函数只有一个返回值 示例1: package main //必须有一个main包 import "fmt" func myfunc01() int { return 666 } ...

  9. perl 函数参数传递与返回值(一)

    perl 函数参数传递与返回值(一) http://www.cnblogs.com/tobecrazy/archive/2013/06/11/3131887.html

随机推荐

  1. hive 导出数据到本地

    有时候需要将hive库中的部分数据导入至本地,这样子做可视化和小规模的数据挖掘实验都是比较方便的.数据导入至本地的HQL语法如下: INSERT OVERWRITE [LOCAL] DIRECTORY ...

  2. ng2 学习笔记(一)

    ng2发布了一段时间,最近才开始着手学习一下,ng2可以说变化海是比较大的,现在写一些学习过程中要注意的点,新手可以参考,大神可以指导: 按照文档来吧: 1.快速开始:没什么可说的,直接上git 克隆 ...

  3. Linux软件安装(二)

    1. 安装软件时,如果依赖的文件是 .so 类型的文件(so文件是谋个文件的小功能模块,如果php.ini中设置的模块引用就是 .so文件) ,这时被依赖的软件要安装完整的软件,一般可以根据 .so ...

  4. shell awk使用(转)

    #####awk  " 对每一行操作的代码块"  操作的文件  awk -F:   '{print $1,$2,$3,$4,$5}' helloworld.sh      打印字段 ...

  5. Selenium with Python 010 - unittest 框架(又称PyUnit 框架)

    unittest进行python代码单元测试 calculator.py--被测试类 #!/usr/bin/env python # -*- coding: utf-8 -*- # 将要被测试的类 c ...

  6. android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。

    android6.0 参考一:简书Android 6.0 新特性详解 参考二:关于Android6.0以上系统的权限问题 参考三:值得你关注的Android6.0上的重要变化(一) 参考四:值得你关注 ...

  7. Chrome浏览器导入数字证书

    1.打开 chrome ,点击 右上角的选项图标,在下拉列表中找到 设置 . 2.在设置页面中,滚动到页面的最底部,找到,并点击显示高级设置,找到 HTTPS/SSL 这一项,点击 管理证书 按键.

  8. NSPredicate(正则表达式)

    1. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换那些符合某个模式的文本. 2. iOS中正则使用 有三种(NSPredicate, rangeOfStri ...

  9. 2017.11.03 正确查找datasheet+ 英语邮件+英语会议

    1寻找合适的元器件和替代料 你需要十分了解元器件的性能参数,如下图所示,所有的主要参数都在列表显示. 2如何在datasheet网找适合的元器件? a如果知道P/N,直接输入. b不知道p/n ,你就 ...

  10. Leetcode 1013. Partition Array Into Three Parts With Equal Sum

    简单题,暴力找出来就行. class Solution: def canThreePartsEqualSum(self, A: List[int]) -> bool: s = sum(A) if ...