一、函数

1、函数定义

def  函数名(参数列表):

2、返回值 return

返回值可以有多个,其实是返回一个tuple

##多个返回值

def sumDiff(x,y):

return x+y,x-y

n1,n2 = eval(input('输入两个数:'))

s,d = sumDiff(n1,n2)

print('和为{},差为{}'.format(s,d))

##计算三角形周长

import math

def square(x):

return x*x

#计算两点之间的距离

def distance(x1,x2,y1,y2):

dist = math.sqrt(square(x1-x2) + square(y1-y2))

return dist

#判断三个点是否构成三角形

def isTriangle(x1,y1,x2,y2,x3,y3):

flag = ((x1-x2)*(y3-y2) - (x3-x2)*(y1-y2)) != 0

return flag

def main():

print('输入三个坐标点(x,y):')

x1,y1 = eval(input('坐标点1(x1,y1)='))

x2, y2 = eval(input('坐标点2(x2,y2)='))

x3, y3 = eval(input('坐标点3(x3,y3)='))

#判断三个点是否构成三角形

if(isTriangle(x1,y1,x2,y2,x3,y3)):

##计算三角形周长

perim = distance(x1,y1,x2,y2)+distance(x2,y2,x3,y3)+distance(x3,y3,x1,y1)

print('该三角形周长为:{:.2f}'.format(perim))

else:

print('三个点无法构成三角形')

main()

3、参数

①位置参数

②默认参数

一是必选参数在前,默认参数在后,否则Python的解释器会报错

二是如何设置默认参数----- 定义默认参数要牢记一点:默认参数必须指向不变对象!

空列表不可作为默认参数   def  a(L=[]) ------->  def  a(L=None)

##列表最后加一个END

def add_end(L=None):

if L is None:

L = []

L.append('END')

return L

③可变参数(参数名前面加*,*args)(可以传入0个或多个参数,这些可变参数在函数调用时自动组装为一个tuple)

## 计算 1*1+2*2+3*3+.....

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

## 传参的时候,把list的所有元素作为可变参数传进去

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

④关键字参数(**kw)(关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict)

def person(name, age, **kw):

print('name:', name, 'age:', age, 'other:', kw)

>>> person('Michael', 30)

name: Michael age: 30 other: {}

>>> person('Bob', 35, city='Beijing')

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}

>>> person('Jack', 24, **extra)

name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

⑤命名关键字参数

## name、age是位置参数; *后面的city和job是命名关键字参数

def person(name, age, *, city, job):

print(name, age, city, job)

>>> person('Jack', 24, city='Beijing', job='Engineer') ##命名关键字参数必须传入参数名

Jack 24 Beijing Engineer

## name、age是位置参数;*args是可变参数, city和job是命名关键字参数

def person(name, age, *args, city, job):

print(name, age, args, city, job)

⑥参数组合

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def wrapper(*args, **kw):  ##可以接受任意参数的调用

⑦如果变量是可变对象【列表】,返回到调用程序后,对象会呈现被修改后的状态

def addInterest(balances,rate):

for i in range(len(balances)):

balances[i] = balances[i] * (1+rate)

def test():

amounts = [1000,500,1200,789]

rate = 0.05

addInterest(amounts,rate)

print(amounts)

test() ##[1050.0, 525.0, 1260.0, 828.45]

**************实例**************

def calculateNum(principal):

# 计算星号的个数

total = int(principal*4/1000)

return total

def createTable(principal,apr):

# 为每一年绘制星号的增长图

for year in range(1,11):

principal = principal * (1+apr)

print("%2d"%year,end='')

total = calculateNum(principal)

print('*'*total)

print('0.0K 2.5k 5.0k 7.5k 10.0k')

def main():

#输入本金和利率

principal = eval(input('输入本金:'))

apr = eval(input('输入利率:'))

#建立图表

createTable(principal,apr)

main()

⑧参数检查(先对参数的数据类型做检查,抛出TypeError错误)

def my_abs(x):

if not isinstance(x, (int, float)): ## isinstance(x, (int, float) ) ------- 传入参数是否为 int 或 float 类型,返回 True // False

raise TypeError('bad operand type')

if x >= 0:

return x

else:

return -x

4、空函数

def nop():

pass

二、全局变量和局部变量

1、可以用 global 保留字在函数内部使用全局变量

n , s = 10,100

def fact(n):

s = 1 ##局部变量s

for i in range(1,n+1):

s *= i

return s

print(fact(n),s) #362880000 100

n , s = 10,100

def fact(n):

global s ##声明全局变量s

for i in range(1,n+1):

s *= i

return s

print(fact(n),s) #362880000 362880000

2、局部变量为组合类型且未创建,等同于全局变量

ls = ['a','d']

def func(a):

ls.append(a)

return

func('g')

print(ls) #['a', 'd', 'g']

ls = ['a','d']

def func(a):

ls = []

ls.append(a)

print(ls)

return

func('g') #['g']

print(ls) #['a', 'd']

三、lambda函数(特殊情况使用,建议使用def,固定情况使用)

= :

f = lambda x,y:x+y

print(f(3,4))

四、递归

在函数的定义中使用函数自身

1、函数+分支结构(if...else...)

2、基例

3、链条

##递归

##n!---n的阶乘

def fact(n):

if n == 0:

return 1

else:

return n*fact(n-1)

print(fact(5))

##字符串反转 s[::-1]

def reverse(s):

if s == '':

return s

else:

return reverse(s[1:]) + s[0]

print(reverse('Hello'))

斐波那契数列

def f(n):

if n == 1 or n == 2:

return 1

else:

return f(n-1) + f(n-2)

五、PyInstaller库(第三方库)

将 .py文件 转换成 无需源代码的可执行文件 exe文件

先安装pyinstaller库

将print1.py文件转换成exe文件,在【dist】文件夹中,【_pycache_】和【build】文件夹可以删掉

node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)相关推荐

  1. postman生成python代码_python代码直接生成可执行exe文件

    前言: python中有一个很厉害的库可以直接将写好的python代码打包成可执行的.exe文件,生成好的文件不需要python运行环境和pycharm等IDE就可以直接双击运行,是不是很厉害呢!这样 ...

  2. python入门函数编程_Python入门——面向函数的编程,过程

    第一部分 函数的定义及调用 1.1 为什么要用函数 提高代码复用性--抽象出来,封装为函数 将复杂的大问题分解成一系列小问题,分而治之--模块化设计的思想 利于代码的维护和管理 1.2 函数的定义及调 ...

  3. python print 变量_Python之print()函数与变量

    本文最后更新于2019-05-09,已超过 1年没有更新,如果文章内容.图片或者下载资源失效,请留言反馈,我会及时处理,谢谢! 温馨提示:本文共1576个字,读完预计4分钟. print()函数 恭喜 ...

  4. python map用法_Python中 map()函数的用法详解

    python map()函数问题 使用map()函数生成一个值D但是检测D的长度时,只能测一次,一次之后D似不知道你的dataSet 是什么数据,是否是从数据库取出来的结果游标, 如果是的 那么dat ...

  5. python递归函数公式_python之内置函数,匿名函数,递归函数

    一. 内置函函数 什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就 ...

  6. python脚本名_python获取类名函数名、脚本路径

    1).python获取当前运行的类名函数名import inspect def get_current_function_name(): return inspect.stack()[1][3] cl ...

  7. Python 技术篇-将python项目打包成exe独立运行程序,pyinstaller库打包python代码实例演示

    首先需要安装 pyinstaller 库. pip install pyinstaller 就可以了. exe程序打包步骤 cmd 进入要编译的 python 文件所在的文件夹, 然后pyinstal ...

  8. python count函数代码_python中count函数简单用法

    python中count函数简单用法 python中count函数的用法 Python count()方法 描述 Python count() 方法用于统计字符串里某个字符出现的次数.可选参数为在字符 ...

  9. python信号采样_python中resample函数实现重采样和降采样代码

    函数原型 resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='s ...

  10. python解决实际问题的代码_Python代码规范问题及解决

    为了养成使用Python编程好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8 只是检测风格错误,而非编码错误! P ...

最新文章

  1. centos中ifcfg-eth0配置ip后,重启network服务提示地址已被使用
  2. jupyter notebook 报错:TypeError: __init__() got an unexpected keyword argument ‘categorical_features‘
  3. boost::container模块实现范围分配器适配器
  4. 一家互联网公司校园招聘的笔试题以及答题分析
  5. dac0832控制电机驱动流程图_某驱动电机控制器拆解实拍照片
  6. [VB]使用ADOX创建Excel文件
  7. 运用AARRR模型对App进行系统性的数据分析
  8. 07-struts2提供的数据校验
  9. 初识delphi-spring-framework
  10. php取名字第一个字,php 获取姓名拼音首字母
  11. Google Hacker
  12. 浅析SEO搜索引擎优化
  13. 关于verilog中综合的过程,可综合与不可综合的理解
  14. 微分方程建模实例:对药剂量开处方
  15. 电脑开远程的几个方法
  16. 追风筝的人 第九章
  17. [pyecharts学习笔记]——页面组件 Page(顺序多图,将多个图将汇总到一个页面)
  18. Asking for advice
  19. 使用easywechat退款
  20. UnityVR--小程序3--金色的子弹2

热门文章

  1. centos7 hadoop3.0.1安装
  2. 用css样式画三角形(提示框三角形)
  3. (二)ElasticSearch6.1.1 Python API
  4. vscode私钥设置_VSCode远程开发配置指南
  5. 数据同步到redis中时候需要 需要给关联的表增加id 如果是一对多 则增加list存储id 如果是一个 则增加一个字段 ;目的是便于取值...
  6. 【PMP】组织结构类型
  7. web.xml 配置文件 超详细说明!!!
  8. 批量找注入 python3+sqlmap结合
  9. 工具资源 Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
  10. 每天学点Linux命令:倒叙打印文件第二行的前100个大写字母