fluent python 1

在高级语言中,交换两变量的值,往往需要设置第三变量作为中间变量,在 SQL
中却很简单。

1 用*来获取不确定数量的参数

用*来获取不确定数量的参数

a, b, *c = range(5)
a, b, c
(0, 1, [2, 3, 4])

总结了C语言中几种交换两个整数数值的函数,欢迎交流

update tbl set a=b, b=a

2 用*运算符来把一个可迭代对象的参数拆开作为函数的参数

用*运算符来把一个可迭代对象的参数拆开作为函数的参数

divmod(20, 8)
(2, 4)
t = (20, 8)
divmod(*t)
(2, 4)

#include <stdio.h>

只要字段双方可以接受对方的数据,交换就成成功,比如:字段 a 为
varchar(10),b 字段有 11 个英文字符,超出 a 的接受范围,交换就会失败。

3 具名元组

定义和使用具名元组需要两个参数,一个是类名,一个是类的各个字段的名字,另一个是由多个字符串组成的可迭代对象,或者由空格分隔开的字段名组成的字符串

from collections import namedtuple

字符串的可迭代

Card = namedtuple(‘Card’, [‘rank’, ‘suit’])

空格分隔的字符串

City = namedtuple(‘City’, “name country population coordinates”)
tokyo = City(“tokyo”, “JP”, 36.93, (35.69, 139.69))
tokyo.country
‘JP’
tokyo.coordinates
(35.69, 139.69)
tokyo[0]
‘tokyo’
City._fields
(‘name’, ‘country’, ‘population’, ‘coordinates’)

使用多种交换变量值的函数比较

4 直接交换变量

python 交换变量,无需中间变量

a, b = (1, 2)
b, a = a, b
a, b
(2, 1)

方法一:使用第三方临时变量
这种函数a,b只是值传递,实质上不能修交换部两个变量的值,只能内部交换两个变量的值

5 对对象进行切片

s[a:b:c]在a与b之间每隔c取值,c可以是负值

s = “hello, world!”
s[::3]
‘hl r!’
s[::-1]
‘!dlrow ,olleh’

void valueExchange01(int a, int b)

6 对序列使用+和*

对序列使用+和*对会创建新序列,而不修改原来的序列

a = [1, 2, 3]
a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
a
[1, 2, 3]

{

7 bisect来管理有序序列

bisect(haystack, needle)返回插入的位置, insort(seq, item)进行插入操作

import bisect
import random
a = [1, 48, 12, 34, 4, 8]
a = sorted(a)
a
[1, 4, 8, 12, 34, 48]
bisect.bisect(a, 5)
2
bisect.insort(a, 5)
a
[1, 4, 5, 8, 12, 34, 48]

printf(“a = %d,b = %dn”,a,b);// 交换前

int temp=0;

temp = a;

a = b;

b = temp;

printf(“a = %d,b = %dn”,a,b); // 交换后

}

方法二:不使用第三方变量,仅使用+-运算符,实质上同样不能交换外部两个变量的值,只能内部交换两个变量的值

void valueExchange02(int a, int b)

{

printf(“a = %d,b = %dn”,a,b); // 交换前

a = b – a;

b = b – a;

a = a + b;

printf(“a = %d,b = %dn”,a,b); // 交换后

}

方法三:使用指针
这个函数是将两个外部变量的地址传进来,然后交换这两个变量的存储空间,实现了外部变量的值的真正交换

void valueExchange03(int *value1,int *value2)

{

int temp = *value1;

*value1 = *value2;

*value2 = temp;

}

方法四:使用异或^
下面函数同样不能交换外部两个变量的值,只能是内部交换两个变量的值

void valueExchange04(int a,int b)

{

a = a^b;

b = a^b;

a = b^a;

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注