Стандарт IEEE 754 .
, Конечно, существуют другие средства сохранить числа, когда IEE754 не достаточно хорош. Библиотеки как Java BigDecimal
доступны для большинства платформ и отображаются хорошо на тип числа SQL. Символы могут использоваться для иррациональных чисел, и отношения, которые не могут быть точно представлены в двоичной или десятичной плавающей точке, могут быть сохранены как отношение.
Все это на самом деле довольно очевидно. Я перечисляю только Pythonic способы сделать эти вещи. Обновление: теперь примеры должны работать как в Python 2, так и в Python 3. В Python 2 для повышения эффективности вы можете заменить xrange () на range () и iteritems () на items ().
PHP
$php = array(1,2,3,4,5,6,7,8,9,10);
for ($i = 0; $i < 10 ; $i ++)
echo $php[$i]."<br>";
Python (обычно вы итерируете по спискам в Python вместо доступа по индексу):
lst = [1,2,3,4,5,6,7,8,9,10]
for item in lst:
print(str(item) + "<br>")
for ($i = 0; $i < 10 ; $i ++)
echo $php[$i] = $i +1 ;
Python:
lst = range(1, 11)
for item in lst:
print(item)
Или может быть:
lst = []
for i in range(10):
lst.append(i + 1)
print(lst[-1]) # prints out last element
$php = array(1,2,3,4,5,6,7,8,9,10);
foreach ($php as $value)
echo $value."<br>";
То же, что и 1-й
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
Python:
lst = [1, 2, 3, 4]
lst = [val * 2 for val in lst]
$arr = array("mot"=>"one", "hai"=>"two","ba"=> "three");
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br />\n";
}
Python (обратите внимание, что {...}
создает dict [словарь] в Python, а не list /):
dct = {'mot': 'one', 'hai': 'two', 'ba': 'three'}
for key, value in dct.items():
print("Key: %s; Value: %s<br />" % (key, value))
$arr = array("one", "two","three");
while (list($key, $value) = each($arr)) {
echo "Key: $key; Value: $value<br />\n";
}
Python:
lst = ['one', 'two', 'three']
for key, value in enumerate(lst):
print("Key: %d; Value: %s<br />" % (key, value))
$arr = array("one", "two","three");
while ($element = each($arr)) {
echo "Key: $element['key']; Value: $element['value']<br />\n";
}
Нет прямого эквивалента Python для этого.
$products = array( array("ITL","INTEL","HARD"),
array("MIR", "MICROSOFT","SOFT"),
array("Py4C", "pythonkhmer.wordpress.com","TUTORIAL")
);
for ($row = 0; $row < 3; $row++)
{
for ($col = 0; $col <3; $col++)
{
echo "|".$products[$row][$col];
}
echo "<br>";
}
Python:
products = [['ITL', 'INTEL', 'HARD'],
['MIR', 'MICROSOFT', 'SOFT'],
['Py4C', 'pythonkhmer.wordpress.com', 'TUTORIAL']]
for product in products:
for item in product:
print('|' + item)
print('<br>')
Или, может быть, более питоническая версия : Вы должны быть уверены, что тип загружен в текущий AppDomain, иначе тип не может быть отражен.
Assembly asm = Assembly.GetExecutingAssembly();
// The executing assembly can change also; so you can load types from other assemblies
// use this if the type isn't loaded in this AppDomain yet.
//Assembly asm = Assembly.LoadFile("path to assembly here", new Evidence());
String typeToLoad = "Master.Enterprise"; // this can be from a config or database call
Type objType = asm.GetType(typeToLoad, true);
if (!objType.IsPublic)
return null;
// make sure the type isn't Abstract
if (((objType.Attributes & TypeAttributes.Abstract) == TypeAttributes.Abstract))
return null;
// IEnterprise is the interface that all of the plugin types must implement to be loaded
Type objInterface = objType.GetInterface("IEnterprise", true);
if (objInterface == null)
return null;
var iri = (IEnterprise)Activator.CreateInstance(objType);
return iri;
Мне кажется, что вам нужно определить интерфейс - затем вы можете потребовать, чтобы ваше свойство возвращало объект, реализующий этот интерфейс, и тогда вы сможете выполнять приведение в этот интерфейс независимо от какой класс реализует этот интерфейс:
IEnterprise enterprise = (IEnterprise)property.GetValue(myObject, null);
Единственный другой вариант, который у вас есть, - это вызов методов и свойств возвращаемого объекта с помощью отражения - это то, что делает отладчик Visual Studio.
Master.Enterprise enterprise = (Master.Enterprise)property.GetValue(myObject,null);
или
Master.Enterprise enterprise = property.GetValue(myObject,null) as Master.Enterprise;
Первый вызовет исключение, если тип несовместим. Второй вернет null, если несовместим.
Если тип неизвестен во время компиляции, и вы не можете предположить, что он реализует известный интерфейс, вы не можете привести его к этому типу, потому что C # является языком со статической типизацией.
Вы сможете сделать это с помощью C # 4.0, если хотите дождаться этого / использовать бета-версию, например:
dynamic obj=property.GetValue(myObject,null);
obj.CallSomeMethod();
Обратите внимание, что это внутренне вызовет методы отражения, чтобы выяснить, как это сделать. Вы можете сделать это сегодня, размышляя над своими призывами. Если вы дадите нам больше информации о том, что конкретно вы хотите сделать с этим возвращенным объектом, я смогу дать вам более подробный ответ.
В будущем вы можете использовать динамический
. На данный момент я думаю, вам следует использовать решение с интерфейсом .